面向对象_详析

面向对象
  1. 程序:

    ​ 程序是为了模拟现实世界,解决现实问题而使用计算机语言编写的指令集合

  2. 现实世界的组成

    世界是由什么组成的?

    ​ 在程序员眼中,现实世界的组成最为明确:“世界是由无数个对象组成的”

  3. 什么是对象?

​ 面向对象思想:一切客观存在的事物都是对象,万物皆对象

​ 任何对象,一定具有自己的特征和行为

对象特征:称为属性,一般为名词,代表对象有什么

对象行为:称为方法,一般为动词,代表对象能做什么

  1. 程序中的对象

    如何使用程序模拟现实世界,解决现实问题?

    ​ 首先,在程序当中,必须具有和现实中相同的对象,用以模拟现实世界。

    ​ 然而,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题

    如何在程序中创造出与现实中一样的对象?
    
    
    现实中的对象-----》《----------程序中的对象
    
    
    现实中的对象多数来自于“模板”,程序中的对象也应该具有“模板”
    
    
  2. 什么是类?

    ​ 汽车设计图纸规定了该款汽车所有的组成部分,包括外观形状、内部结构、发动机型号、安全参数等具体的信息,这即为现实对象的模板。程序中的模板也有相同作用,称为“类”。

    ​ 按照设计图纸创造出来的汽车,才是真实存在,切实可用的实体,所以汽车实体被称为现实中的对象。而通过程序中的模板创造出来的实体,即为程序中的对象,称之为“对象”。

  3. 类的抽取

    在一组相同或类似的对象中,抽取出共性的特征和行为,保留所关注的部分。

  4. 类的定义

    public class Dog {   //类名
        
        String breed;    //品种
        int age;         //年龄
        String sex;      //性别
        String furColor; //毛色
        
    }
    
    /*
    
    	属性:通过变量表示,又称为实例变量
    	语法:数据类型 属性名
    	位置:类的内部,方法的外部
    
    */
    
    public void eat() {
        System.out.println("eating...");
    }
    
    public void sleep() {
        System.out.println("sleeping...");
    }
    /*
    
    	方法:通过方法表示,又称为实例方法
    	语法:
    		public 返回值类型 方法名(形参) {
    			//方法的主体
    		}
    
    */
    
  5. 对象的创建

    public class TestCreatObject {
        public static void main(String[] args) {
            
            Dog myDog = new Dog();//基于Dog类创建对象
            
            mydog.bread = "ss";//访问属性:对象名.属性名 = 值;//赋值
            mydog.age = 2;//访问属性:对象名.属性名 = 值;//赋值
            mydog.sex = "公";//访问属性:对象名.属性名 = 值;//赋值
            mydog.furColor = "白色";//访问属性:对象名.属性名 = 值;//赋值
            
            
            System.out.println(myDog.bread + "\t" + mydog.age + "\t" + mydog.sex + "\t" + mydog.furColor);
            
            myDog.eat();//调用方法:对象名.方法名();
            mydog.sleep();//调用方法:对象名.方法名();
            
        }
    }
    
  6. 类与对象的关系

    类:模板(一个) ------------------》(创建)对象:实例(多个)

    类:定义了对象应具有的特征和行为,类是对象的模板

    对象:拥有多个特征和行为的实体,对象是类的实例

  7. 实例变量

    思考:之前学习局部变量时,要求必须先赋值再使用,否则编译错误。对于实例变量而言,未赋值并不会编译错误,能否直接访问?

    public class TestCreatObject {
        public static void main(String[] args) {
            Dog myDog = new Dog();
            //省略赋值语句
            
            System.out.println(mydog.bread + "\t" + mydog.age + "\t" + mydog.sex + "\t" + mydog.furColor);
            
        }
    }
    

    注意:实例变量的默认值:

    ​ 整数:0 小数:0.0 字符:\u0000(空格) 布尔:false 其他:null

    运行结果:null 0 null null

  8. 实例变量与局部变量的区别

    局部变量实例变量
    定义位置方法或方法内的结构当中类的内部,方法的外部
    默认值字面(与数组相同)
    使用范围从定义行到包含其结构结束本次有效
    命名冲突不允许与局部变量重名不允许与实例变量重名,可与局部变量重名,局部变量优先
  9. 实例方法

    对象的实例方法包含两部分:方法声明和方法的实现

    ​ 方法的声明:

    ​ 代表对象能做什么

    ​ 组成:修饰符 返回值类型 方法名(形参列表)

    ​ 方法的实现:

    ​ 代表对象怎么做:即如何实现对应的功能

    ​ 组成:(逻辑代码)

  10. 课堂案例:

    /*
    定义学生类:
    	属性:姓名(name)、年龄(age)、性别(sex)、分数(score)
    	方法:打招呼(sayHi)//打印学生所有信息
    
    创建多个学生对象,为其各个属性赋值,并调用方法
    
  11. 方法重载

    重载(Overload):一个类中定义多个相同名称的方法

    要求:

    ​ 方法名称相同

    ​ 参数列表不同(类型、个数、顺序)

    ​ 与访问修饰符、返回值类型无关

    调用带有重载的方法时,需要根据传入的实参去找到与之匹配的方法

    好处:;灵活、方便、屏蔽使用差异

  12. 代码调错

    思考:以下方法是不是重载?

    ​ public void m(int a) {}

    ​ public void m(int b) {}

    注:两个方法的方法名称和参数列表都相同,只有参数名称不一样,编译报错;只是参数名称不同,并不能构成方法的重载

  13. 构造方法

    构造方法;类中的特殊方法,主要用于创建对象

    特点:

    ​ 名称与类名完全相同

    ​ 没有返回值类型

    ​ 创建对象时,触发构造方法的调用,不可通过句点手动调用

    注意:如果没有类中显示定义构造方法,则编译器默认提供无参构造函数。

  14. 对象创建过程

    public class TestConstructors {
        public static void main(String[] args) {
            
            Student s = new Student();//触发对象创建
            
        }
    }
    
    class Student {
        
        String name;
        int age;
        String sex;
        double score;
    
    public Student() {
        
        	System.out.println("Student() Executed");
        
    	}  
    }
    

    对象创建过程:

    ​ 内存中开辟对象空间

    ​ 为各个属性赋予初始值

    ​ 执行构造方法中的代码

    ​ 【将对象的地址赋值给变量】

  15. 对象的内存分配

对象的内存分配

    Student s = new Student();
    s.name = "tom";
    s.age = 20;
    s.sex = "male";
    s.score = 98.5
存储对象的变量s(引用)中保存对象的地址,通过变量中的地址访问对象的属性和方法
  1. 构造方法重载

    构造方法也可重载,遵循重载规则

    class Student {
        
        String name;
        int age;
        String sex;
        double score;
        
        public Student() {
            
            System.out.println("Student() Executed");
        }
        
        public Student(String name) {
            
            System.out.println("Student(String name) Executed");
            
        }
        
        public Student(String name,int age) {
            
            System.out.println("Student(String name, int age) Excuted");
            
        } 
    }
    

在这里插入图片描述

创建对象时,根据传入的数据,匹配对应的构造方法。
  1. 默认构造方法

    public class TestConstructors {
        public static void main(String[] args) {
            Student s = new Student();//编译错误:无参数构造方法未定义
        }
    }
    
    class Student {
        String name;//在类中,如果没有显示定义构造方法,则编译器默认提供无参数构造方法
        int age;
        String sex;
        double score;
        
        public Student(String n, int a, String s, double sc) {
            //如已手动添加有参数构造方法,则无参数构造方法不再默认提供,可根据需求自行添加。
        }
    }
    
  2. 构造方法为属性赋值

在这里插入图片描述

  1. this关键字

1

2

3

总结
  1. 什么是对象?

    ​ 一切客观存在的事物都是对象,万物皆对象

  2. 什么是类?

    ​ 定义了对象应具有的特征和行为,类是对象的模板

  3. 什么是方法重载:

    ​ 方法名相同、参数列表不同

  4. 什么是构造方法?

    ​ 类中用于创建对象特殊方法,名称与类名相同,没有返回值,不可通过句点调用

  5. 什么是this关键字:

    ​ 代表当前实例,通过this.访问实例成员;通过this()/this(xxx)访问本类中的其他构造方法

作业
...

片转存中…(img-OadPWS0a-1592909480954)]

[外链图片转存中...(img-LXFmIrQL-1592909480956)]
总结
  1. 什么是对象?

    ​ 一切客观存在的事物都是对象,万物皆对象

  2. 什么是类?

    ​ 定义了对象应具有的特征和行为,类是对象的模板

  3. 什么是方法重载:

    ​ 方法名相同、参数列表不同

  4. 什么是构造方法?

    ​ 类中用于创建对象特殊方法,名称与类名相同,没有返回值,不可通过句点调用

  5. 什么是this关键字:

    ​ 代表当前实例,通过this.访问实例成员;通过this()/this(xxx)访问本类中的其他构造方法

作业
...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值