Data
Stay hungry,Stay foolish!

导航

 

一句话:父类引用指向子类对象

格式: 父类名称 对象名 = new 子类名称()
或者
接口名称 对象名 = new 实现类名称()

public class Fu {
	public void main() {
		System.out.println("父类方法");
	}
	public void mainTest() {
		System.out.println("父类特殊方法");
	}
}

public class Zi extends Fu{
	@Override
	public void main() {
		System.out.println("子类方法");
	}
}

public class Mulituplate {
	public static void main(String[] args) {
		Fu objFu = new Zi();
		objFu.main();
		objFu.mainTest();
	}
}

访问成员变量:
直接通过对象名称访问成员变量,谁是对象,优先使用谁,没有则向上找。
间接通过方法访问成员变量,方法属于谁,则优先使用谁,没有则向上找。
重写了父类方法,就是50,不重写就是20。

public class Fu {
	
	int num = 20;
	
	public void main() {
		System.out.println("父类方法");
	}
	public void mainTest() {
		System.out.println("父类特殊方法");
	}
}

public class Zi extends Fu{
	int num = 50;
	@Override
	public void main() {
		System.out.println("子类方法");
	}
}


//调用
public class Mulituplate {
	public static void main(String[] args) {
		Fu obj = new Zi();
		obj.main();
		obj.mainTest();
		System.out.println(obj.num); // 20

	}
}

访问成员方法:
看new的是谁,就优先用谁,没有则向上找。但是无法访问子类特有的成员。

使用多态的好处:使左边的代码更加简单。无需修改

对象的向上转型:(多态)

父类引用指向子类对象。

对象的向下转型:
向上转型是安全的,但是无法访问子类特有的成员方法

对象的向下转型一定要进行类型instanceof判断

if (obj instanceof Fu) {
			Zi zi = (Zi)obj;
			zi.mianZi();
		}
posted on 2019-10-23 16:03  进击中的青年  阅读(122)  评论(0编辑  收藏  举报