Java-继承

110 阅读2分钟

面向对象的第二个基本特征:继承
1 、什么是继承?

生活中:
    继承 --> 延续
         --> 扩展
代码中:
    继承--> 重复使用已有的类的代码(复用)
        --> 扩展已有类的代码(扩展)

2、为什么要继承?

1)代码的复用和扩展
(2)满足is-a的关系
事物的分类来说,子类别的关系。
Student is a Person.
Teacher is a Person.
Car is not a Person.

3、如何继承

关键字:extends
语法格式:
【修饰符】class 子类名 extends 父类名 {

}

子类:SubClass,又称为派生类
父类:SuperClass,又称为基类、超类

子类表示的事物范围大,还是父类表示事物的范围大?
Person类(人)是父类,
Student类(学生)是子类。
子类 < 父类

子类更具体,里面的成员描述更多了。
父类更抽象,笼统的描述信息更少。

4、继承有什么特点?

1)子类会继承父类所有的实例变量和实例方法。
如何理解这句话?
A:虽然子类继承了父类的所有实例变量和实例方法。但是因为权限修饰符的原因,某些成员在子类中不能直接使用,可以间接使用。
private修饰的成员,在子类中是不能直接使用的。
权限修饰符缺省的成员,在跨包的子类中是不能直接使用的。本包子类可以。

B:这里说的继承所有,是说,子类代表的这个事物,它具备父类中所描述的所有特征。
类的定义:一类具有相同特性的事物的抽象描述。
例如:Person类中有name、age属性,eat()方法,
这些特征无论它是否私有,对于子类Student类,它都应该有这个特征。

C:既然是子类继承了所有的实例变量,那么在子类对象创建时,需要在子类对象的堆空间中开辟对应的内存来存它的值。

D:所谓的继承,不是说,父类的代码在子类中完全重复一遍,而是在使用子类时,
除了可以用自己本类声明的成员,还可以去父类中寻找可以(看权限修饰符)用的成员。

(2)Java中只支持单继承,即一个子类只能有一个“直接”父类
比喻:一个人只有一个亲生父亲
(3)Java支持多层继承,
比喻:祖宗很多代,代代相传
(4)一个Java父类,可以同时有多个子类

image.png

public class testPhone {
    public static void main(String[] args) {
        smartPhone sp = new smartPhone();
        sp.sendMessage();
        sp.call();
        sp.show(); //正常显示

        //sp.name = "华为"; //报错,因为是private修饰符,只能通过get set修改
        sp.setName("华为");
        sp.setPrice(7800);

        System.out.println(sp.phoneMessage());
    }
}



public class phone {
    private String name;
    private  int price;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }

    public void sendMessage(){
        System.out.println("发信息");
    }

    public void call(){
        System.out.println("打电话");
    }

    public void show(){
        System.out.println("显示号码");
    }

}



public class smartPhone extends phone {
    public String  phoneMessage(){
        return "手机名称:"+ getName() +",手机价格:"+ getPrice();
    }
}