java入门3.29

今日所学:在继承方面的隐藏、覆盖和动态绑定

1>隐藏:   对于成员变量和静态方法 如果子类和父类一样 子类隐藏父类的
2>覆盖: 对于实例函数   如果子类和父类一样 子类覆盖父类的
3>上转型对象调用子类覆盖父类的实例方法时  调用的是子类的方法    动态绑定

如下代码截图和源代码有对上述的实际操作和详细注释

 

 

package updownshift;
//隐藏 覆盖和动态绑定

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Suberclass sub=new Suberclass();
        Superclass sup=sub;//由于子类对象 is a 父类对象  所以,可以将父类的引用指向子类实例   即:子类对象赋值给父类     称为   上转型 
        //子类对象是父类对象  父类对象不是子类对象  例如:学生是人  人不一定是学生
        Superclass sup1=new Superclass();
       // Suberclass sub1=sup1;   说明:父类对象不是子类对象  错误信息:- Type mismatch: cannot convert from Superclass to 
   	    //System.out.println((sub instanceof Superclass));
   	   // System.out.println((sup instanceof Superclass)); //instanceof : 判断前面实例是否为后面的对象
   	   // System.out.println((sup1 instanceof Suberclass));
        
        
        System.out.println(sub.str);
        System.out.println(sup.str);//上转型  对于成员变量 子类隐藏父类的  上转型对象引用的是父类的
        
        
        sub.staticsubfunction();  //子类对象调用自己的静态函数
        sup.staticsupfunction(); //上转型对象调用父类的静态方法
        sub.staticsupfunction(); //子类调用了继承自父类的静态方法
        
        
        sub.function();//子类实例调用它的实例方法
        sup.function();//上转型对象 调用实例方法      当子类覆盖父类的同名方法时   上转型对象调用的仍然是子类的实例方法 称为动态绑定
        
        
        sub.staticfunction();//子类调用静态方法
        sup.staticfunction();//上转型对象调用静态方法   当子类覆盖父类静态方法时,上转型对象调用的是父类的静态方法    称为静态绑定
        
	}

}
class Superclass{
	int supint;
	String str="父类的实例字符串变量";
	public  Superclass(){
		 System.out.println("执行父类无参构造函数");
		 }
	
		void function(){
			 System.out.println("调用父类的实例函数");
		}
		public static void staticfunction(){
			 System.out.println("调用父类的静态方法——--staticfunction()");
		}
		public static void staticsupfunction(){
			 System.out.println("调用父类的静态函数");
		}
	}
	

class Suberclass extends Superclass{ //继承是一种“is a”的关系。即:子类对象也是一个父类对象
	int subint;
	String str="子类的实例字符串变量"; //子类实例变量和父类实例变量  名称和类型完全一样  子类的隐藏父类的变量
	public Suberclass(){
		System.out.println("执行子类无参构造函数");
	}
	void function(){//子类覆盖父类的实例方法
		 System.out.println("调用子类的实例函数");
	}
	public static void staticfunction(){//子类覆盖了父类的静态方法
		 System.out.println("调用子类的静态方法——--staticfunction()");
	}
	public static void staticsubfunction(){
		 System.out.println("调用子类的静态函数");
	}
	
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值