extends:继承
什么是继承呢,这个可以说是java的基础了,继承都不知道的兄弟可以回家种田去了,(碎碎念,碎碎念.....)
已有的类能被继承
已有的抽象类能被继承,(继承了抽象类需要把抽象类里的抽象方法abstract全部实现)
接口不能被继承(只能被实现,其实和继承差不多,但是要实现所有接口里的方法,可以一个类实现多个接口,类似多继承)
父类和子类之间的关系
子类可以使用父类中除被private修饰的所有方法,属性
子类可以根据需求修改父类继承来的方法(重写),反之不行.
当子类和父类有一个一模一样的方法时, 用this(本类),super(父类)来区分
父类子类的好处
这是实现多态的要素之一, 多态后就可以写出一段所有子类都通用的代码,当添加新的子类后,这些代码是不需要修改的.也叫动态绑定.
父类引用指向子类对象(A a = New B();)的使用(向上转型)先看实例
public class Father {String a="father";
void print(){
System.out.println("father");
}
}
public class Son extends Father{
String a="son";
@Override
void print() {//重写父类方法
System.out.println("son");
}
public void aa(){//子类定义的方法
System.out.println(a);
}
public static void main(String[] args) {
Father son=new Son();
son.print();//输出son
son.aa();//编译出错
System.out.println(son.b);//编译出错
System.out.println(son.a);//输出father
}
}
至于为什么呢,记住以下几点
- 成员变量
- 编译看左边,运行看左边
- 构造方法
- 子类的构造都会默认访问父类构造
- 成员方法
- 编译看左边,运行看右边
- 静态方法
- 编译看左边,运行看左边
- 所以静态方法不能算方法的重写
向上转型 目的是规范和扩展,提高了代码的维护性和扩展性
今天有个人问我,父类能不能调用子类的方法....当然可以!
1.把子类传递到父类的有参构造中,然后调用。
2.子类方法静态化
3.反射调用
但是这么干的是傻吊,会被笑一年