JIANGzihao0222

导航

 

继承与多态

继承与方法重写override,什么是方法重写?

由子类重新定义从父类中继承来的方法,将其改变或延伸。成员变量不存在重写这个说法。

  1.  
    public void roam() {
  2.  
    // 继承父类方法的功能
  3.  
    super.roam();
  4.  
    // 扩展的功能
  5.  
    }
区分 IS-A 与 HAS-A 关系

IS-A,表示二者具有继承关系,这是一种单向的链式关系。
HAS-A,表示二者是包含关系。

四种访问控制修改符,它们有哪些区别?

private < default < protected < public
public类型的成员,会被继承。private类型的成员,不会被继承。
一个类的成员,包含自己定义的变量和方法,还包含从父类所继承下来的成员。

继承到底有什么意义?

避免重复的代码;定义共同的协议。

什么是多态?
  1.  
    对象的声明、创建与赋值:
  2.  
    Dog d = new Dog();

在上述对象的创建过程中,引用类型和对象的类型相同。在多态中,引用类型和对象的类型可以不同。

Animal d = new Dog();    // 这就是多态

在多态中,即引用类型可以是实际对象类型的父类(满足 IS-A 关系,就产生了多态)。

  1.  
    Animal[] animals = new Animal[3];
  2.  
    animals[0] = new Dog();
  3.  
    animals[1] = new Cat();
  4.  
    animals[2] = new Wolf();
  5.  
    for(int i=0; i<animals.length; i++) {
  6.  
    animals[i].eat(); // 调用子类Dog的 eat()方法
  7.  
    animals[i].roam(); // 调用子类Cat的 roam()方法
  8.  
    }
  9.  
     
  10.  
    Dog / Cat / Wolf 都是 Animals 的子类。

方法的参数或返回值,也可以是多态。

  1.  
    public Animal getAnimal( Animal a ) {
  2.  
    // 参数a, 可以是Animal子类的对象
  3.  
    return a; // 返回Animal对象或者其子类的实例对象。
  4.  
    }

使用多态,你就可以编写出引进新子类时也不必修改的程序。

继承关系中,方法覆写要遵守哪些约定?

  1. 参数必须要一样,且返回类型必须要兼容。
  2. 不能降低方法的存取权限。

什么是方法重载?
方法名相同,但参数列表不同,即是重载,它与方法的返回值类型、方法的存取权限都无关。方法重载与继承关系中的方法覆写有什么不同?

  1.  
    public class Overloads {
  2.  
    // 以下两个方法,即为方法重载
  3.  
    public int addNums ( int a, int b) {
  4.  
    return a + b;
  5.  
    }
  6.  
    public double addNums (double a, double b) {
  7.  
    return a + b;
  8.  
    }
  9.  
    }

 

posted on 2022-10-28 20:46  实名吓我一跳  阅读(27)  评论(0)    收藏  举报