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()); } }
时间: 2024-10-06 17:20:47