面向对象编程

1. 封装

2. 继承

  1. 父类中私有的变量或方法不会被子类继承。
  2. 子类会继承父类的所有方法。

2.1. super关键字

  1. 使用super关键字访问父类的成员变量或方法,使用this关键字访问本类的成员变量或方法。

  2. 当子类的对象被创建时,在调用无参构造器的时候,默认会先调用父类的无参构造器,再执行子类的无参构造器。

    public Son(){
      super(); // 此为默认隐藏代码,可手动敲出,但必须在方法体内的第一行
      // ...
    }
    
  3. 父类没有无参构造器时,子类也没有无参构造器。无法被无参实例化,需要重写super()方法指向有参构造器。

  4. superthis不能同时调用构造方法。

  5. super只能出现在子类的方法或者构造器中,只有继承条件才可以使用。

2.2. 方法重载

  1. 重写需要有继承关系,子类重写父类方法。
    1. 方法名必须相同。
    2. 参数列表必须相同。
    3. 修饰符的范围可以扩大但不能缩小。
    4. 抛出的异常可以被缩小,但不能被扩大。
  2. 为什么需要重写?
    1. 父类的功能,子类不一定需要或不一定满足。

3. 多态

  1. 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。父类引用可以指向子类对象。即父类 变量名 = new 子类()

    总结:静态方法(.)看左边,动态方法(new)看右边。

// B类 extends A类
/*
public static void test(){
    System.out.println("B");
}
*/
A a = new A();
a.test();    // A
B b = new B();
b.test();    // B
A c = new B();
c.test();    // A


/*
public void test(){
    System.out.println("B");
}
*/
A a = new A();
a.test();    // A
B b = new B();
b.test();    // B
A c = new B();
c.test();    // B
  1. 指向子类的父类无法调用子类特有的方法,但可以通过强制类型转换实现。
  2. 对象能执行哪些方法看左边,和右边关系不大。
  3. 子类转父类,可能丢失自己本来的一些方法。

3.1. 不能重写的方法

  1. static方法:属于类,不属于实例。
  2. final:常量。
  3. private方法。
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2022-05-18 16:24:00

results matching ""

    No results matching ""