一个.java源文件中可以有多个类(不包含内部类),但是只有一个类是Public的,如
public class Test {
public class A{//内部类
}
public class B{//内部类
}
// /**
// * @param args
// */
public static void main(String[] args) {
}
}
class C{
}
class D{
}
父类,子类
比如你现在你有一个iphone4和一个iphone5的JavaBean,它们都属于手机,都有型号,厂商等变量,如果他们都继承了同一个父类,那个父类把他们共同的方法和变量都写好了,比如厂商,那么这两个子类就不用写厂商了,只要写他们不同的,比如型号等就好了
父类
public class Father {
public String num;
void print(){}
}
子类
public class Son extends Father{
void print(){
System.out.println("子类中!");
}
void show(){
System.out.println("show()中!");
}
}
测试类
public static void main(String[] args) {
Father obj = new Son();
obj.print();
obj.show();//这句调用会报错
}
1如果想实现多态,那么必须要有三个条件:父类引用,子类对象,方法覆盖,如果父类(Father)中有一个show()方法,形成方法覆盖,那么此时就可以obj.show(),此时形成了多态
2,没有方法覆盖,那么这里只能解释为父类引用去访问一个子类的方法,当然,父类引用没有这么大范围的权限,因此就会报错
多态实际上是一种机制,在编译的时候会生成一张虚拟的表,来记录所有覆盖的方法,当然,没有被覆盖的方法是不会被记录在这张表上的,那么当父类的引用去调用了没有被覆盖的子类的方法,那么是不符合该表的,编译的时候就会报错,在执行程序的时候,虚拟机会在这张虚拟的表中找覆盖的方法,比如引用中实际上存的是一个子类对象的引用,那么就会去找子类中相应的覆盖的方法来执行定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性
所以,父类类型的引用可能调用父类中定义的所有的方法和属性,而对子类中定义而父类中没有的方法是无可奈何的