package com.me;
public class Book extends Books{
String name="subname";
String author;
//show方法的重载
public void show(String s){
System.out.println("sub show");
}
//show1方法的重写,不是重载
public void show1(){
System.out.println("sub show1");
}
public void show3(){
System.out.println("sub show3");
}
public static void main(String args[]){
Books bs=new Book();
//属性调用父类,方法调用子类(虚方法调用)
{System.out.println(bs.name);
bs.show1();
}
//执行时父类show方法中的this.show1()指代子类中的show1方法
System.out.println("***********");
{bs.show();
}
//bs能访问super中的所有方法
System.out.println("***********");
{
bs.show2();
}
System.out.println("***********");
//bs无法访问Book类中的show3方法,若父类中有相同show3方法(有相同的方法名和参数)则
//会访问子类中的方法,这就是前面所说的方法调用子类子类
{
//bs.show3(); 出错
}
//查看bs是否是Book类的实例,若是则强制类型转化后就可以访问子类中的所有方法
if(bs instanceof Book){
Book book=(Book)bs;
book.show3();
}
}
}
扩展:Books为一接口而Book为实现这一接口的类,访问name时
访问的还是接口中的值(super name)
package com.me;
class Books {
String name="supername";
String author;
public void show(){
System.out.println("super show");
this.show1();
}
public void show1(){
System.out.println("super show1");
}
public void show2(){
System.out.println("super show2");
}
public void show3(String s){
System.out.println("super show3");
}
}
supername
sub show1
***********
super show
sub show1
***********
super show2
***********
sub show3