Java-多态

/*
 *重写:子类中定义一个与父类签名相同的方法,此时子类的方法覆盖了父类的方法。
 *重载:相同的方法名却有不同的参数,
 *继承:子类继承一个父类,使得子类能够重用父类的代码,同时也是实现多态的前提,
 *
 *多态性:发送消息给某个对象引用,让对象引用自行决定响应何种行为。
 *主要体现:通过将子类对象的对象引用赋值给父类对象的对象变量来实现动态方法的调用。例如:Father child= new Child();
 *一个类的对象变量可以引用其任何一个子类的对象(反之不成立),
 *为什么一个类的对象变量只能引用子类而不能引用父类呢?
 *因为编译器在处理此类问题的时候可以自动实现向上转型,也就是将被引用的对象转型成引用它的超类。
 *如果要向下转型,则需要显式表示并且强制转换。    
 *
 *所遵循的规则:
 *1,由被引用的对象(子类)的类型而不是引用对象(父类)的类型来决定调用谁的方法,
 *前提条件:这个方法能被调用应在子类中已经定义或覆盖,否则,调用父类方法或变量
 *2,父类对象引用无法调用子类特有的方法,即“丢失”一部分信息,(注意子类对父类方法重载后算两个不同的方法了),
 *并且当父类中的方法被子类重写后(签名相同时),那么父类对象引用就会调用子类所重写的这个方法,即动态连接。
 */ 


class Car{
	private String name;
	public Car() {
		setName("car");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

class Bike extends Car{
	public String id;
	String name="Bike";
	Bike(){
	}
	public String getName(){
		return name;
	}
	void show(){
		System.out.println("sub");
	}
}

public class Main {
	public static void main(String[] args) {
		Car car=new Bike();
		System.out.println(car.getName());	//getName方法在继承时,被修改 "覆盖"
		//System.out.println(car.show());	//error 向上转型show方法不能使用,"丢失"
	}
}
class Car{
	private String name;
	public Car() {
		setName("car");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

class Bike extends Car{
	public String id;
	String name="Bike";
	Bike(){
	}
	
	void show(){
		System.out.println("sub");
	}
}

public class Main {
	public static void main(String[] args) {
		Car car=new Bike();		//向上转型
		System.out.println(car.getName());
		/*基类和派生类拥有不同的域
		 * car.getName()调用基类name,即super.name
		 * 若在派生类写入getName方法
		 * 则调用this.name
		 * */
		//System.out.println(car.show());	//error 向上转型show方法不能使用,"丢失"
	}
}
//out: car

class Car{
	private String name;
	public Car() {
		setName("car");
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

class Bike extends Car{
	public String id;
	String name="Bike";
	Bike(){
	}
	void show(){
		System.out.println("sub");
	}
}

public class Main {
	public static void main(String[] args) {
		Bike bike=(Bike) new Car();	
		//向下转型,需要强制类型转换
		//因为父类不知道,要转成哪一个子类
		//需要显式指定
		System.out.println(bike.getName());
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值