继承Java

 

Animal a1 = new Dog();

父类型引用==>指向 子类型引用

引用==>对象

自动类型转换(向下转换)用抽象转向更具体。

只有在继承的情况下,栈堆类型可以不一致且产生关系。栈中是父类,堆中是子类。

方法有没有实现调用取决于有没有重写该方法,如果该方法不在子类中出现就调用父类方法,如果出现就调用子类方法。

@Override重写

1.只发生在继承中。

2.方法头一定不能变(Copy)【只改变逻辑体内容,其他一律不变】

编译时,编译器只看a1有没有eat()方法,有:pass;没有:报错。

绑定父类eat()方法。静态绑定

运行时,先看子类中有没有该方法,有:实现;没有:从父类中调用该方法。动态绑定

多态是指一个方法的两种形态,编译和运行中是两种形态

Dog wc = (Dog)a1;

wc.guard();

//((Dog)a1).guard;

//wc比a1更大 强制类型转换(向上转型)

public class test00{
	public static void main(String[] args){
		Animal a1 = new Dog();//a1是Animal类型的Dog
		a1.eat();
		((Dog)a1).guard();//强转
		//Dog wc = (Dog)a1;  旺财
		//wc.guard();
	}
}

class Animal{
	private int id;
	private String name;
	public Animal(){}
	public Animal(int id,String name){
		this.id = id;
		this.name = name;
	}
	public void eat(){
		System.out.println("Animal eat food");
	}
	public void eat(String food){
		System.out.println("Animal eat"+food);
	}
}

class Dog extends Animal{
	//Dog is a Animal
	private int id;
	private String name;
	public Animal(){}
	public Animal(int id,String name){
		this.id = id;
		this.name = name;
	}
	public void eat(){
		System.out.println("Dog eat bone");
	}
	public void guard(){
		System.out.println("Dog guard gate");
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值