Java编程思想-多态的缺陷

一、“覆盖私有方法”

1、代码更易理解

public class PrivateOverride {

	private void f(){
		System.out.println("privateOverride");
	}
	public void g(){
		System.out.println("privateOverride.g");
	}
	public static void main(String[] args) {
		PrivateOverride po = new Derived();
		po.f();//privateOverride;对于多态,不能覆盖私有方法。
		po.g();//derived.g
	}
}
class Derived extends PrivateOverride{
	public void f(){
		System.out.println("derived");
	}
	public void g(){
		System.out.println("derived.g");
	}
}

2、下个结论

只有非private方法才可以被覆盖。

二、域
1、代码

class Super{
	public int field = 0;
	public int getField(){
		return field;
	}
}
class Sub extends Super{
	public int field = 1;
	public int getField(){
		return field;
	}
	public int getSuperField(){
		return super.field;//通过super获得基类的域
	}
}
public class FieldAccess {
	public static void main(String[] args) {
		Super sup = new Sub();
		System.out.println(sup.field+"---"+sup.getField());//0---1,域访问的还是基类的域,但方法实现了多态
		Sub sub = new Sub();
		System.out.println(sub.field+"---"+sub.getField()+"---"+sub.getSuperField());
		//1---1---0要想获取基类的域值,可以通过super.的形式。
	

2、结论

当Sub对象转型为Super引用时,任何域访问操作都将由编译器解析,因此不是多态的。

三、静态方法

1、代码

class StaticSuper{
	public static String staticGet(){
		return "staticSuper";
	}
	public String dynamicGet(){
		return "staticSuper.d";
	}
}
class StaticSub extends StaticSuper{
	public static String staticGet(){
		return "staticSub";
	}
	public String dynamicGet(){
		return "staticSub.d";
	}
}
public class StaticPolymorphism {
	public static void main(String[] args) {
		StaticSuper sup = new StaticSub();
		System.out.println(sup.staticGet());//staticSuper;静态方法依然调用的是基类的方法
		System.out.println(sup.dynamicGet());//staticSub.d
	}
}


2、结论

静态方法是与类,而并非与单个的对象相关联的




---该博文为Java编程思想第四版第八章多态的摘录,欲知详情,可前去查阅---

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值