一、继承知识点简单梳理
1、继承会获得父类的属性和方法,子类还能有自己的属性方法。
开闭原则:对修改关闭,对扩展打开。
2、JAVA支持单继承(一个子类只能有一个直接父类)、支持多重继承(A extends B,B extends C)。
JAVA不支持多继承,原因:如果两个父类有相同的方法,那么子类继承父类调用这个相同的方法的时候,会出现不 确定性,即二义性。多继承在JAVA中通过接口来实现。
3、this()调用子类的构造方法,super()调用父类的构造方法。
4、重写:方法名相同,参数列表相同,返回类型相同。且子类的修饰权限要大于父类的修饰权限。
重载:方法名相同,参数列表不同,与返回值类型无关。
二、
子类继承父类,子类拥有父类所有的属性和方法,但是父类的私有属性和私有方法,子类是不能访问的,当然一些父类的私有属性可能可以通过相应的方法访问到,但是私有的方法似乎不能简单的访问,这里暂不考虑Java反射机制。在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象。子类对象确实拥有父类对象中所有的属性和方法,但是父类对象中的私有属性和方法,子类是无法访问到的,只是拥有,但不能使用。所以子类对象是绝对大于父类对象的,所谓的子类对象只能继承父类非私有的属性及方法的说法是错误的,可以继承,只是无法访问到而已。
不能继承,子类只能在父类中写一个public的get方法来获取父类中的private属性,子类就调用父类的get方法来获取私有属性。
// 封装 javabean
public class Person{
// 属性私有化
private String name;
// 无参构造方法
public Person(){
}
// 公有的set get
public Person(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
//学生类 继承
public class Student extends Person{
public Student(String name){
super(name);
}
}
// 测试类
public class TestStudent{
public static void main(String[] args){
Student mStudent = new Student("张三");
String mName = mStudent.getName();
System.out.println("Name is : " + mName);
mStudent.setName("李四");
mName = mStudent.getName();
System.out.println("Name is : " + mName);
}
}