<span style="font-size:18px;">import java.util.*; public class SixtySixth { public static void main(String[] args){ System.out.println(new Child().name); System.out.println(new Child().count); System.out.println(new Child().parent); System.out.println(((Base)new Child()).count); System.out.println(((Base)new Child()).name); //System.out.println(((Base)new Child()).uniq); Child.fun();//调用子类隐藏的方法 new Child().f1();//调用子类继承的方法,在f1()中调用重写的f() } } class Child extends Base{ public String name = "child";//掩盖父类的非静态name public static int count=100;//掩盖了父类的静态count public static int uniq = 200;//子类独有的静态 public static void fun(){ System.out.println("fun:child"); } public void f(){ System.out.println("override"); } } class Base{ public String name = "base"; public static int count = 0; public static int parent=5;//父类独有静态 public int bc = 6;//父类独有的非静态bc,可被子类继承 public Base(){ count++; } public void f1(){ f(); } public static void fun(){ System.out.println("fun:base"); //f(); } public void f(){ System.out.println("original"); } } </span>
child
100
5
4
base
fun:child
override
关于继承
静态方法,一般方法和静态属性,一般属性都会被子类继承到,但是只有一般方法可以被重写,有多态性,其他三个都是被继承或被隐藏。
如果被隐藏了,那么访问的就是子类中的属性,而不管是不是合理。
如:
import java.util.*; public class SixtySixth { public static void main(String[] args){ System.out.println(new c().a); } } class c extends b{ private int a = 0; } class b{ public int a = 1; }
访问到的a是谁呢?是输出0还是1呢?
SixtySixth.java:12: 错误: a可以在c中访问private System.out.println(new c().a); ^ 1 个错误
既没有输出0也没有输出1,而是报错了。也就是说被隐藏之后的属性,只能在类里面用super访问隐藏的属性或方法。
import java.util.*; public class SixtySixth { public static void main(String[] args){ new c().f(); } } class c extends b{ private int a = 0; public void f(){ System.out.println("我的a="+a); System.out.println("我父类的a="+super.a); } } class b{ public int a = 1; }
我的a=0 我父类的a=1
时间: 2024-11-10 15:51:03