JAVA学习笔记12——super关键字+继承的内存分析+组合

最近在看JAVA教学的视频,觉得老师讲的很好,同时借用源代码还有笔记来撰写本系列博客,记录自己的学习内容,同时也供看到的人学习。

进入第十二篇,首先来介绍super关键字:


这里注意一下,super与this一样,也是普通方法共有的隐式参数。使用的方法在上一片的代码片里面有,由于内容并不复杂就先介绍这些。

接下来进行一段包含继承、super代码的内存分析(友情提示:弄懂这里一通百通)。

要分析的代码:

public class Animal /*extends Object*/ {
	String eye;
	public void run(){
		System.out.println("跑跑!");
	}
	public void eat(){
		System.out.println("吃吃!");
	}
	public void sleep(){
		System.out.println("zzzzz");
	}
	public  Animal(){
		super();
		System.out.println("创建一个动物!");
	}
}
class Bird  extends Animal {
	public void run(){
		super.run();   //会输出“跑跑”
		System.out.println("我是一个小小小小鸟,飞呀飞不高");  //这部分相当于重写
	}
	public void eggSheng(){
		System.out.println("卵生");
	}
	public Bird(){
		super();
		System.out.println("建一个鸟对象");
	}
}
public class Test {
	public static void main(String[] args) {
		Bird b = new Bird();
		b.run();
		b.eggSheng();
		b.toString();
	}
}
内存分析图:


关于上图部分内容的解释:整个的调用关系像一个递归过程,main方法里面new bird的时候调用了bird的构造方法,其构造方法的第一个是super,于是继续找父类的构造器,其父类animal构造器的第一个是super,于是再网上找父类Object,此时调用到头。而在内存堆里面我们看到了父、子类之间是嵌套关系,当在外面的一层找不到相应的代码的时候就去里面的一层找。

最后的内容是介绍一下组合,组合其实就是把引用类型直接拿来作为自己(类)的一个成员(前提是要new出来空间,否则直接拿来调用会发生空指针异常),下面看看它和继承的区别:


示例代码:

public class Animal2 {
	String eye;
	
	public void run(){
		System.out.println("跑跑!");
	}
	public void eat(){
		System.out.println("吃吃!");
	}
	public void sleep(){
		System.out.println("zzzzz");
	}
	
	public  Animal2(){
		super();
		System.out.println("创建一个动物!");
	}
	
	public static void main(String[] args) {
		Bird2 b = new Bird2();
		b.run();
		b.animal2.eat();
	}
}

class Mammal2  {
	Animal2 animal2=new Animal2();
	public void taisheng(){
		System.out.println("我是胎生");
	}
	
}

class Bird2  {
	Animal2 animal2=new Animal2();
	
	public void run(){
		animal2.run();     //效果和之前继承的是一样的,得先new一个annimal出来才能这么用,要不会出现空指针异常。
		System.out.println("我是一个小小小小鸟,飞呀飞不高");
	}
	
	public void eggSheng(){
		System.out.println("卵生");
	}
	
	public Bird2(){
		super();
		System.out.println("建一个鸟对象");
	}	
}
由此可以看出,继承常用来表示一个子类也是它父类所属的那种类型,如:一个哺乳动物也是一个动物。而组合成用来表示一个类同时拥有其他几个类所对应的事物,如:一只鸟同时拥有翅膀、羽毛、爪子。所以在什么情况用组合还是继承,大家应该有心中有一个规律了吧?其实,组合和继承都是为了提高代码的复用性,是程序看起来更加简洁明了。

好啦,休息去了~



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值