JAVA学习-05-韩顺平老师
JAVA-面向对象的三大性质
01-封装
 **概念:**封装就是把抽象的数据(属性)和对数据的操作(方法)封装在一起,数据被保护
 在内部程序的其他部分只有通过被授权的操作,才能对数据进行操作。
 好处:
 -隐藏实现细节
 -可以对数据与进行验证,保证安全合理。
 实现步骤:
 1.将属性私有化(不能直接修改属性)
 2.提供一个共有的set方法,对数据属性判断并赋值
 3.提供一个共有的get方法,来获取属性的值
 02-继承
 **基本介绍:**继承可以解决代码复用性问题,当多个类存在相同的属性和方法时,
 可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,
 所有的子类不需要在重新定义这些属性和方法,只需要通过extends继承
 基本语法:
 -子类就会自动的继承父类的属性和方法
 -父类又叫 超类,基类
 -子类又称派生类
// class 子类 extends 父类 {
// }
public class son extends Father {
}
继承细节:
 1.子类继承所有的属性和方法,非私有属性可以直接访问、
 私有方法在子类中不能直接访问,必须通过父类提供的共有方法访问。
 2.子类必须调用父类的构造器,完成父类的初始化。
 3.当创建子类对象时,不管使用子类的哪个构造器,默认情况下都调用
 父类的无参构造器,如果父类没有无参构造器,就必须super指定调
 用父类的哪个构造器,否则编译不通过。
 4.super()在使用的时,必须放在构造器的第一行
 5.super()和this()都要放在构造器第一行,所以两个方法不能在同一个
 构造器。
 6.java所有类都是Object类的子类。
 7.父类构造器的调用不限于直接父类,将一致网上追溯到Object类。
 03-super关键字
 **基本概念:**super代表父类的引用,用于访问父类的属性和方法。
 基本语法:
 1.访问父类的属性和方法,但是不能访问私有的属性和方法。
 -super.属性 super.方法(参数列表)
 2.访问父类的构造器
 -super(参数列表)
 super细节:
 1.当子类和父类的成员重名时,为了访问父类的成员,必须使用super。
 2.super的访问不限于父类,也可以是父类的父类,访问顺序从下到上。
 04-方法重写
 **概念:**方法重写也叫做方法覆盖。
 注意事项:
 1.子类的方法的参数,方法名称,要和父类的一致。
 2.子类方法的返回类型和父类的返回类型一致,或是父类返回类型的子类。
 -比如 父类的返回类型使Object,子类的返回类型可以使String。
 3.子类的方法不能缩小父类方法的访问限权。
 05-多态
 **基本介绍:**方法或是对象具有多种形态,是面向对象的第三大特征
 多态是建立在封装和继承的基础之上的。
 多态的具体体现:
 1.一个对象的编译类型和运行类型可以不一致。
 2.编译类型是定义的时候就确定了,不能更改。
 3.运行类型是可以变化的。
 4.编译类型看定义 = 的左边,运行类型看定义 = 的右边。
 多态的向上转型:
 -前提:两个对象存在的继承关系
 1.本质:父类的引用指向了子类的对象。
 2.语法:父类类型 引用名 = new 子类类型
 3.特点:编译类型看左边,运行类型看右边,可以调用父类中的成员方法
 不能调用子类的特有成员,具体运行看子类的具体实现(动态绑定机制)
 多态的向下转型:
 1.语法:子类类型 引用名 = (子类类型) 父类引用。
 2.只能强转强转父类的引用,不能强转父类的对象。
 3.要求父类必须执行当前目标类的对象。
 4.当向下转型后,可以调用子类类型中的所有成员。
public class Polydetail {
    public static void main(String[] args) {
        Animal animal = new cat(); // 向上转型
        animal.eat(); // 调用是从运行类型的类开始找方法
        animal.sleep();
        System.out.println(animal.name);
        System.out.println(animal.age);
        cat cat1 = (cat)animal; // 向下转型,才能访问cat的私有方法
        cat1.catchMouse();
    }
}
public class Animal {
    String name = "动物";
    int age = 10;
    public void eat() {
        System.out.println("吃");
    }
    public void sleep() {
        System.out.println("睡");
    }
}
class cat extends Animal {
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}
动态绑定机制
 1.当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定。
 2.当调用对象属性时,没有动态绑定的机制,哪里声明,哪里使用(就近使用属性)。










