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类
 
 
 

转载于:https://www.cnblogs.com/chengxuxiaoman/p/10921729.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值