面向对象的特征之二:继承性
一、继承性的好处:
- 1.减少代码量,提高代码复用性
- 2.便于功能的拓展
- 3.为之后多态性的使用,提供了前提
二、继承性的格式:class A extends B{}
-
A:子类、派生类、subclass
-
B:父类、超类、基类、superclass
-
1.体现:一旦子类A继承父类B以后,子类A中就获取了父类B中声明的结构:属性、方法
-
特别的:父类中声明为private的属性或者方法,子类继承父类以后,仍然认为获取了父类的私有结构。
-
只是因为封装性的影响,使得子类不能直接调用父类结构而已,可使用setxxx()或者getxxx()获取其属性。
-
2.子类继承父类以后,还可以声明自己的属性和方法
三、Java中关于继承性的规定
- 1.Java中类的单继承性:一个子类只能继承一个父类
- 2.一个父类可以被多个子类继承
- 3.子类直接继承的父类称为:直接父类。间接继承的父类称为:间接父类。
- 4.子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
四、说明
- 1.如果没有显式的声明一个类的父类的话,则此类继承于java.lang.object类
- 2.所有的java类(除了java.lang.object类之外)都直接或者间接的继承于java.lang.object类
- 3.意味着,所有的java类具有java.lang.object类中声明的功能
public class Creature {
public void breath(){
System.out.println("呼吸");
}
}
public class Person extends Creature{
String name;
private int age;
public Person(){
}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
}
public class Student extends Person{
// String name;
// int age;
String major;
public Student(){
}
public Student(String name, int age, String major){
this.name = name;
//this.age = age;
getAge();
this.major = major;
}
// public void eat(){
// System.out.println("吃饭");
// }
// public void sleep(){
// System.out.println("睡觉");
// }
public void study(){
System.out.println("学习");
}
public void show(){
System.out.println("name=" + name + ", age=" + getAge());
}
}
public class ExtendsTest {
public static void main(String[] args) {
Person p1 = new Person();
//p1.age = 1;
p1.eat();
Student s1 = new Student();
//s1.age = 2;
s1.setAge(2);
s1.sleep();
s1.name = "Tom";
s1.show();
s1.breath();
Creature c = new Creature();
c.breath();
c.toString();
}
}