面向对象的第二个基本特征:继承
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父类,可以同时有多个子类
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();
}
}