java 继承

tech2025-11-03  2

子类能够继承父类所有的一切,但不能访问父类中private修饰的。

class A{ public int m = 10; } class B extends A{ } public class Demo { public static void main(String[] args) { B b = new B(); System.out.println(b.m); //10 } }

当要执行方法时:

Son son = new Son(); // son.fun(); if (子类中是否重写了该方法) { 执行子类的方法,变量为子类的变量; } else if (该方法未被子类重写) { 执行父类的方法,变量为父类的变量; }

例子1

class A { public String str = "a"; public void fun1() { System.out.println("A-fun1-" + str); } public void fun2() { System.out.println("A-fun2-" + str); } public void fun3() { System.out.println("A-fun3-" + str); } public void funA() { System.out.println("A-funA-" + str); } } class B extends A{ public String str = "b"; public void fun1() { System.out.println("B-fun1-" + str); } public void fun2() { System.out.println("B-fun2-" + str); } public void funB() { System.out.println("B-funB-" + str); } } class C extends B{ public String str = "c"; public void fun1() { System.out.println("C-fun1-" + str); } public void funC() { System.out.println("C-funC-" + str); } } public class JavaTest { public static void main(String[] args) { B b = new B(); b.fun1(); //B-fun1-b ==>从A中继承fun1(),B重写了fun1()==>执行B中重写的fun1(),变量也为该方法所属类B中的变量 b.fun2(); //B-fun2-b ==>从A中继承fun2(),B重写了fun2()==>执行B中重写的fun2(),变量也为该方法所属类B中的变量 b.fun3(); //A-fun3-a ==>从A中继承fun3(),B未重写fun3()==>执行A中的fun3(),变量也为该方法所属类A中的变量 b.funA(); //A-funA-a ==>从A中继承funA(),B未重写funA()==>执行A中的funA(),变量也为该方法所属类A中的变量 b.funB(); //B-funB-b ==>B中新增的函数==>执行B中的funB(),变量也为该方法所属类B中的变量 // b.funC(); //报错 Cannot resolve method 'funC()' ==>B中不存在funC() System.out.println("-----------------------"); C c = new C(); c.fun1(); //C-fun1-c ==>B从A中继承fun1(),B重写fun1()==》从B中继承B重写的fun1(),C重写了fun1()==>执行C中重写的fun1(),变量也为该方法所属类C中的变量 c.fun2(); //B-fun2-b ==>B从A中继承fun2(),B重写fun2()==》从B中继承B重写的fun2(),C未重写fun2()==>执行B中重写的fun2(),变量也为该方法所属类B中的变量 c.fun3(); //A-fun3-a ==>B从A中继承fun3(),B未重写fun3()==》从B中继承A的fun3(),C未重写fun3()==>执行A中的fun3(),变量也为该方法所属类A中的变量 c.funA(); //A-funA-a ==>B从A中继承funA(),B未重写funA()==》从B中继承从A的funA(),C未重写funA()==>执行A中的funA(),变量也为该方法所属类A中的变量 c.funB(); //B-funB-b ==>从B中继承B新增的funB(),C未重写funB()==>执行B中重写的funB(),变量也为该方法所属类B中的变量 c.funC(); //C-funC-c ==>C中新增的函数==>执行C中的funC(),变量也为该方法所属类C中的变量 } }

例子2

class A{ public int m = 10; public void showM() { System.out.println(m); } public void showM2() { System.out.println(m); } public void test() { m += 2; showM2(); } } class B extends A{ public int m = 11; public void showM2() { System.out.println(m); } } public class JavaTest { public static void main(String[] args) { B b = new B(); //==>从A中继承showM(),B未重写showM()==>执行A中的showM(),变量也为该方法所属类A中的变量 b.showM();//10 //==>从A中继承test(),B未重写test()==>执行A中的test(),变量也为该方法所属类A中的变量 // ==>m+=2,这里的m为A的m,执行后A.m=12,b.m=11 // ==>showM2(),从A中继承showM2(),B重写了showM2()==>执行B中的showM2(),变量也为该方法所属类B中的变量 // ==>System.out.println(m),这里的m为B的m,b.m=11 b.test(); //11 } }
最新回复(0)