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");
}
}
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