栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础【之】面向对象编程(类、面向过程、面向对象、对象、属性、行为)(大象进冰箱)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础【之】面向对象编程(类、面向过程、面向对象、对象、属性、行为)(大象进冰箱)

Java基础【之】面向对象编程(类、面向过程、面向对象、对象、属性、行为)(大象进冰箱)

1.面向对象与面向过程(大象门事件!!!)

1.1.面向过程(POP)1.2.面向对象(OOP)1.3.注意 2.类的组成

2.1.类、对象、构造器2.2.匿名对象2.3.方法2.4.属性2.5.访问与权限 3.关键字(this、package、import)

3.1.this3.2.package3.3.import 4.大象进冰箱(代码实现)《上一篇:运算、位运算、比较、循环与控制》《 UML类图》《目录:Java渐进式学习》《幕》

1.面向对象与面向过程(大象门事件!!!) 1.1.面向过程(POP)

面向过程(POP) :Object Oriented Programming
面向过程,强调实现功能逻辑的最小单位是,函数方法。
强调一个函数实现一个小功能,然后函数之间组合调用,完成整体事件。

经典 大象门事件,分几步走?(流程与函数个数并非固定)

1.函数与执行顺序:(1.买冰箱、2.开门、3.找大象、4.推进冰箱、5.关门)

2.函数与执行顺序:(1.买冰箱并且开门、2.找大象并且推进冰箱、3.关门)

1.2.面向对象(OOP)

面向对象(OOP):Procedure Oriented Programming
面向对象,强调实现功能逻辑的最小单位是,类和类实例化出来的对象.
强调先将事件查分设计为,多种类,然后设计类中的方法,然后实例化类对象,对象间相互调用完成整体事件

面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)

经典 大象门事件,分几步走?(按照世人思路,基本上面向对象都会有最佳实践,流程与函数相对固定)
1.设计一个 冰箱.class 类
2.设计一个 大象.class 类
3.设计一个 人.class 类
4.各自创建实例,通过人把冰箱打开,通过人把大象装进冰箱,通过人关闭冰箱门

1.3.注意

作为代码编写者来说,面向对象是一种思想,需要借助面向对象的语言,才能实现所谓的类,就是对现实问题中所出现的,可分析的事物的抽象,抽出具有事物特点的 属性 与 行为(方法)对象,是类实例化出来的产物,作为内存中的一块区域存在,产生的同时具备了类的属性与行为举例
人喝水:需要实际分析,人如何喝水,水从哪里来,是否需要盛水容器,由这些疑问可以简单的先抽象出
人.class(是否口渴(),喝水() )
水杯.class(容量,水,是否有水() )
水桶.class (水,是否有水(),倒水() )
如果不满足实际情况,可以删减和修改类中的内容,最终目的是满足实际情况

2.类的组成

java语言中,通过关键字 class 定义类文件类:是对现实事物的抽象,如:人.class,树木.class对象:是对类创建出来的事物,如:人可以创建出,小王、小张 ; 树木可以创建出,杨树、柳树属性(成员变量):(类、对象)具有的属性,如:小王身高1.7m,杨树高20m行为(方法、函数):(类、对象)具有的方法,如:小王会弹吉他,小张会唱歌和游泳

2.1.类、对象、构造器

类:通过 class关键字进行定义

创建对象语法: 类名 对象名 = new 类名();
使用“对象名.对象成员”的方式访问对象成员(包括属性和方法)

构造器:创建对象;给对象进行初始化;
1.构造器与类相同的名称
2.没有返回值
3.不可以用 static、final、synchronized、abstract、native 修饰
4.不可以用 return
语法:修饰符 类名 (参数列表) { 初始化代码;}

根据参数不同,构造器可以分为如下两类:
隐式无参构造器(系统默认提供)
显式定义一个或多个构造器(无参、有参)

注 意:
Java语言中,每个类默认都有一个无参构造器,默认构造器的修饰符与所属类的修饰符一致
显式定义了构造器,系统将不再提供默认构造器
一个类可以创建多个重载的构造器
父类的构造器不可被子类继承


class GouZaoQi {
    private int a = 1;
    private String b = "hello";

    public GouZaoQi() {
    }

    public GouZaoQi(int a) {
        this.a = a;
    }

    public GouZaoQi(String b) {
        this.b = b;
    }

    public GouZaoQi(int a, String b) {
        this.a = a;
        this.b = b;
    }

    public void hello() {
        System.out.println(a +" "+ b);
    }
}

public class TestGouZaoQi {

    public static void main(String[] args) {
        GouZaoQi gz1 = new GouZaoQi();
        gz1.hello();// 1 hello

        GouZaoQi gz2 = new GouZaoQi(999);
        gz2.hello();// 999 hello

        GouZaoQi gz3 = new GouZaoQi("ooo");
        gz3.hello();// 1 ooo

        GouZaoQi gz4 = new GouZaoQi(999, "ooo");
        gz4.hello();// 999 ooo

    }
    
}

2.2.匿名对象

不定义对象名,直接通过 new 类().方法(); 来调用方法和属性。这种对象叫做 匿名对象如果对一个对象只需要进行一次创建,一次使用,就可以使用匿名对象。常用作参数传递。

2.3.方法

方法
用来完成某个功能。在某些语言中 也称为函数或过程。
将功能封装为方法,实现代码重用,方法必须定义在类里。格式:
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
方法体程序代码
return 返回值;
}修饰符:public,缺省,private, protected等没有返回值:void。有返回值:“return 返回值” 并 声明出返回值的类型。

参数形参:方法声明时的参数实参: 方法调用时实际传给形参的参数值参数列表:可以包含零个,一个或多个参数。多个参数时,中间用“, ”隔开可变参数列表:方法名(参数的类型名 ...参数名)基本数据类型:传递的是“数据值”引用数据类型:传递的是“地址值/引用”

方法重载:方法名相同,参数类型不同或者参数顺序不通普通方法:通过对象调用普通方法静态方法/类方法:用 static 关键字修饰,通过类名调用静态方法


class GouZaoQi {
    private int a = 1;
    private String b = "hello";

    //无参构造器
    public GouZaoQi() {
    }

    //有参构造器
    public GouZaoQi(int a) {
        this.a = a;
    }

    //有参重载构造器
    public GouZaoQi(String b) {
        this.b = b;
    }

    //有参重载构造器
    public GouZaoQi(int a, String b) {
        this.a = a;
        this.b = b;
    }

    //普通方法
    public void hello() {
        System.out.println(a + b);
    }

    //静态方法
    public static void helloStatic(String str) {
        System.out.println("静态方法: " + str);
    }

}

public class TestGouZaoQi {

    public static void main(String[] args) {
        //通过对象调用普通方法
        GouZaoQi gz1 = new GouZaoQi();
        gz1.hello();//

        //调用静态方法,通过类名调用
        GouZaoQi.helloStatic("略略略~");

    }

}
2.4.属性

普通属性:通过对象调用,普通属性类属性/静态属性:调用静态属性,通过类名调用语法格式:修饰符 数据类型 属性名 = 初始化值 ;


class GouZaoQi {
    //属性 a
    public int a = 1;
    //静态属性 b
    public static String b = "hello";

    //无参构造器
    public GouZaoQi() {

    }

}

public class TestGouZaoQi {

    public static void main(String[] args) {
        //通过对象调用,普通属性
        GouZaoQi gz1 = new GouZaoQi();
        System.out.println(gz1.a);

        //调用静态属性,通过类名调用
        System.out.println(GouZaoQi.b);

    }
}
2.5.访问与权限

在一个类中:类中的方法可以直接访问类中的成员变量。 static方法内不可以访问非static在不同类中:先创建类的对象,再用对象访问类中的成员与方法。静态 直接用类名.访问

访问权限可以作用于,类、成员变量、方法类的权限修饰,只能用 public 或 默认(不写)

public:可以被任意类访问。protected :能被同一个包下的类访问,还可以被任意子类访问。默认:只能被同一个包下的类访问。private:不可以被其他类访问。

3.关键字(this、package、import) 3.1.this

this
this指的是,当前类被实例化后的,对象的引用;一般作用于,当参数与成员变量名称一致时,用来区分属性与参数。如下方 大象进冰箱 代码中的 this.name = name;this访问属性和方法时,如果当前类中不存在时,会向上找当前类的父类,如果没有直接编译报错。

this可以简化构造器间的相互调用调用方式:this(参数列表)注意:
this(形参列表) 必须声明在类的构造器的首行!
构造器中不能通过 this(形参列表) 的方式调用自身构造器
在类的一个构造器中,最多只能使用一次 this(形参列表)

class DaXiang {
    //大象名字
    public String name;

    //大象构造函数--
    public DaXiang() {
        this("默认");
    }
    
    //大象构造函数
    public DaXiang(String name) {
        this.name = name;
    } 
    
}

3.2.package

package

package 指明该文件中定义的类所在 的包。

语法:package 顶层包名.子包名 ;
包对应于文件系统的目录,package语句中,用 “. ” 来指明包(目录)的层次;
包通常用小写单词标识。通常使用所在公司域名的倒置:com.atguigu.xxx

作用:
将功能相近的类划分到同一个包中,划分项目层次,便于管理
解决类命名冲突

JDK中的一些包

    java.lang:核心类,字符串、基本类型包装类、系统操作、线程java.net:网络相关的类和接口。java.io:输入/输出功能的类。java.util:工具类。java.text:格式化java.sql:数据库编程相关java.awt:图形用户界面(GUI)
3.3.import

语法:import 包名. 类名;

作用
为了在自定义类中,使用上述package包中的功能。
通过import语句,引入指定包层次下的类 或 全部类(.*) 。
import语句告诉编译器到哪里去寻找类,路径错误会运行时会报错。

4.大象进冰箱(代码实现)

大象.class 类、冰箱.class 类、人.class 类、测试类

测试类的执行流程1.创建 大象2.创建 冰箱3.创建 人4.操作
4.1.人操作冰箱开门
4.2.人通过冰箱
4.3.把大象装进冰箱
4.4.人关闭冰箱门

class DaXiang {
    //大象名字
    public String name;

    //大象构造函数
    public DaXiang(String name) {
        this.name = name;
    }

    //输出当前信息
    @Override
    public String toString() {
        return "DaXiang{" +
                "name='" + name + ''' +
                '}';
    }

}


class BingXiang {

    //冰箱名字
    public String name;

    //冰箱构造函数
    public BingXiang(String name) {
        this.name = name;
    }

    public void 开门() {
        System.out.println(name + ":开门");
    }

    public void 关门() {
        System.out.println(name + ":关门");

    }

    public void 装东西(Object obj) {
        System.out.println(name + ":装进一个 :" + obj.toString());
    }

}


class Ren {

    //人名
    public String name;

    //人构造函数
    public Ren(String name) {
        this.name = name;
    }

    //执行操作
    public void start(DaXiang daXiang, BingXiang bingXiang) {
        System.out.println(name + " : 开始了自己的操作");
        bingXiang.开门();
        bingXiang.装东西(daXiang);
        bingXiang.关门();
    }
}


public class DaXiangJinBingXiang {

    public static void main(String[] args) {
        DaXiang 大象 = new DaXiang("大象");
        BingXiang 孩儿牌子冰箱 = new BingXiang("孩儿牌冰箱");

        //
        Ren ren = new Ren("小明");
        ren.start(大象, 孩儿牌子冰箱);

    }

}

《上一篇:运算、位运算、比较、循环与控制》

比较、运算、位运算(点击跳转)循环、流程控制 (if else、whitch case、while、do while、for…i、foreach、多层循环与退出)(点击跳转)

《 UML类图》

点击跳转

《目录:Java渐进式学习》

点击跳转

《幕》

留白 —<老吉> ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/770942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号