今天学习了面向对象的第二大特征----继承性。下面进行总结:
- 1、一旦子类继承了父类以后,那么子类就获取了父类 所有的 属性和方法。
*私有的属性也是继承到了,只是由于封装性的影响,不可以直接调用;方法也是一样的道理;构造器的话,还可以用,但是不可以理解为把父类的构造器粘贴到子类处,因为构造器要与类同名
–
*特别的,父类中声明为private的属性或方法,子类继承父类后,仍然认为获取了父类中私有的结构;只是由于封装性搞得影响,使得子类不能直接调用父类的结构而已。
*封装性解决的是结构的可见性的问题,而继承性解决的是能不能那倒里边的结构的问题;
*---->继承性决定了都可以拿到,但是拿到之后可不可以 调用,取决于封装性
2、子类继承父类以后,还可以声明自己特有的属性或方法。实现功能的拓展- 注意:子类和父类的关系,不同于集合和子集的关系
3、Java中关于继承的规定
一个父类可以有多个子类
一个子类只能有一个父类
子类和父类是相对的概念
子类直接继承的父类,称为:直接父类;简介继承的父类,称为:间接父类
子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法
------>所有类(java.lang.Object类除外),都直接或间接的继承于java.lang.Object类类
具体的可以通过以下代码理解:
1、Creature类
public class Creature {
/*
* 在这里,Creature类的父类是java.lang.Object类
* ------>所有类(java.lang.Object类除外),都直接或间接的继承于java.lang.Object类
*
*/
public void breath() {
System.out.println("呼吸");
}
}
2、Person类
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 void eat() {
System.out.println("吃饭");
sleep();
}
private void sleep() {
System.out.println("睡觉");
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3、Student类
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;
setAge(age);
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());
}
}
4、测试类(包含main方法)
public class ExtendsTest {
public static void main(String[] args) {
Person p1 = new Person();
// p1.age = 1;
p1.eat();
System.out.println("********");
Student s1 = new Student();
s1.eat();
// s1.sleep();
s1.name = "Tom";
s1.setAge(10);
System.out.println(s1.getAge());
s1.breath();
Creature c = new Creature();
System.out.println(c.toString());
}
}
路漫漫其修远兮,吾将上下而求索!
坚持每天的学习,完成任务量,加油!