Java SE 继承和多态(一)

1 继承

1.1为什么要继承

观察上图,我们发现Bird和Dog这两个类有许多共性,那每次我们都要写,那太麻烦了!!!

那我们是否能把这些共性给抽离呢?用什么给他们抽离出来呢?答:能,继承

1.2 继承概念

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性 的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了 由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

1.3继承语法

class 子类  extends 父类 {
   //.....
}

1.4 父类成员访问

1.4.1 子类中访问父类的成员变量

1.当子类和父类不存在同名成员变量时,子类可以直接访问父类中的成员变量。

class Base {
    int b;
    int c;
}

public class Derived extends Base{
    int a;
    public void method(){
        a = 10;
        b = 20;
        c = 30;
    }

}

2. 当子类和父类成员变量同名时,优先访问子类自己的成员变量。

class Base {
    int b = 50;
    int c = 90;
}

public class Derived extends Base{
    int a;
    public void method(){
        a = 10;
        b = 20;
        c = 30;
    }
}

成员变量就近原则:子类自己有优先访问自己的,如果没有则从父类里找。

1.4.2 子类中访问父类的成员方法

与1.4.1的访问形式相同。

1.5 super关键字

1.5.1super的使用

1.super只能在非静态方法中使用

2.super在子类方法中,访问父类的成员变量和方法。

class Base{
    int a = 10;
    int b = 20;
    public void method(){
        int c = a + b;
        System.out.println(c);
    }
}

public class Derived extends Base{
    public void test(){
        System.out.println(super.a);
        System.out.println(super.b);
        super.method();
    }
}

3.super帮助父类初始化

class Base{
    int a = 10;
    int b = 20;

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

public class Derived extends Base{
    public Derived(int a, int b) {
        super(a, b);
    }
}

1.6继承方式

1 单继承

public class A {
    .....
    .....
}

public class B extends A{
    .....
    .....
}

2 多层继承

public class A {
    .....
    .....
}

public class B extends A{
    .....
    .....
}

public class C extends B{
    ....
    ....
}

3 不同类继承同一类

public class A {
    .....
    .....
}

public class B extends A{
    .....
    .....
}

public class C extends A{
    ....
    ....
}

1.7 final关键字

1 被final修饰的变量,表示常量不能被修改;

2 被fianal修饰的类,不能被继承;

3 被final修饰的方法,不能被修改;