JAVA实训总结:继承-——子类创建对象原理

继承关键字:extends
Java只允许单继承存在
不可以被继承的东西:
1.private成员
体现了java的封装特点,外部类只允许set()get()方法调用,若无set()方法,则类创建的对象, 只会在被创建时用构造方法赋值·,且只可赋值一次(每次用构造方法new出的对象地址均不同)
 
2.构造方法(构造方法不可以被继承,只可以用super()调用)
 
3.子类与父类不在同包,使用默认访问权限的成员
 
访问修饰符总结:
private:只可以在本类调用,外部类访问需要 get() 方法
默认(friendly):可在本类访问,可在同包中可以访问
protected:可在本类访问,可在同包中可以访问,可在不同包但为其子类的类中访问
public:上述均可访问,可在不同包不为其子类的类中访问
 
子类创建对象原理:
子类所有的 构造函数 默认调用父类的无参构造函数(其实是默认省略掉了一行代码:super(););省略掉的这行super()代码可以自行添加到构造函数的第一行(必须是第一行,否则报错)
若子类调用父类的有参构造写法为:super( 类型 参数)
父类:person
public class Person {
int num = 0;
Person(){}
Person(int num){
this.num = num;
System.out.println("传入人数"+num+"\t父类人数"+this.num);
}
public void print(){
System.out.println("执行父类类方法");
}
}

 

子类:student
public class Student extends Person{
int num = 0;
String name = null;
public Student(){}
public Student(int num,String name){
super(num);
super.print();
this.name = name;
System.out.println("子类人数"+num);
System.out.println("父类人数"+super.num);
}
}

 

测试类:
public class Test {
public static void main(String[] args) {
Student student = new Student(99,张三);
student.print();
}
}

 

当执行 Student student = new Student(99)时,内部执行顺序为:
1.利用父类 int num = 0;开辟空间此时Person.num=0 但传入的num为99;Person.num与num并不指向一个空间
2.执行父类构造方法this.num = num;此时num为99,但是Person.num一直为0
3.然后执行子类的属性
4.接着执行子类构造方法
以上过程在子类输出super.num 均为99
在父类输出num为99,输出this.num为99
因为这时子类创建对象开辟的空间是包含父类开辟的空间的
如图所示:
 
同时,在初始化该子类对象(student)时,会同时创建三个对象(创建父类对象与Object对象),在java中所有的类都有一个父类,如果你的类不继承任何类,java会自动让它继承Object类
 
 
 
posted @ 2019-05-25 11:00  郭小满  阅读(2208)  评论(0编辑  收藏  举报