父类的引用指向子类的对象

本文深入探讨了Java中的继承机制与多态特性,通过Father、Son、Sun和SecondSon四个类展示了如何利用继承创建子类,并通过重写方法实现多态。详细解释了子类如何覆盖父类的方法,以及通过静态方法间接访问子类属性和方法的过程。

1、Father.java

package com.ljb.extend;
public class Father {
 public int x = 10;
 public int fGet() {
  return x;
 }
}

2、Son.java

package com.ljb.extend;
public class Son extends Father {
 // 不能出现与父类同名属性
 public int a = 100;
 public int fGet() {
  System.out.println(sGet());
  return a;
 }
 public int sGet () {
  return x;
 }
 /**
  * @param args
  * 好比代理模式
  * 父类的引用指向子类的对象(本身是父类,使用父类属性,调用子类覆盖父类的方法,不能直接访问子类方法,通过此方法间接访问)
  * 只能调用子类覆盖父类的方法,
  * 在此重写方法中可以调用子类的方法
  * 通过此重写方法可以访问到子类的所有方法及属性
  */
 public static void main(String[] args) {
  Father s = new Son();
  System.out.println(s.fGet());
  // 不能直接调用子类方法
//  System.out.println(s.sGet());
 }
}

3、Sun.java

package com.ljb.extend;
public class Sun extends Son {
 public int s = 200;
 public int fGet() {
  System.out.println(sGet());
  System.out.println(a);
  return s;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  Father sun = new Sun();
  System.out.println(sun.fGet());
 }
}

4、SecondSon.java

package com.ljb.extend;
public class SecondSon extends Father {
 private Son son;
 
 // 实现调用第一个子类方法
 public int fGet () {
  if (son == null) {
   son = new Son(); 
  }
  return son.a;
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  Father f = new SecondSon();
  System.out.println(f.fGet());
 }
}

转载于:https://my.oschina.net/u/2320342/blog/488201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值