继承
继承是Java面向对象的三大特征。从已有的类中派生出新的类,即保留父类的相关属性和方法又可以去拓展新的方法。通过关键字extends 实现。
clsaa Person{}
修饰符 class Zhangsan extends Person{
//类的内容
}
继承的特点:
1.只支持单继承不支持多继承 一个类只能有一个父类不能有多个父类
(继承的为子类,被继承的为父类)
//error
clsaa Zhangsan extends Person , Asian {
}
2.支持多层继承(继承体制)
clsaa A {
}
class B extends A{
}
clsaa C extends B {
}
3.提高了代码的复用性和维护性是多态的前提但在一定程度上产生了高耦合,改变父类子类也会跟着改变。
super 和 this 关键字
this代表本类 super 代表了父类 。
子类继承了父类的方法和属性,但是并不是所有的方法都是适用于子类的比如
class A{
int a = 5 ;
}
class B extends A {
int a = 6 ;
System.out.println(a);//输出为6
System,out,println(super.a);//输出为5
}
super 关键字有两个用途:一是调用父类的方法,二是调用父类的构造器。
当子类去调用构造器是我们需要去用super调用父类构造器
其中如果用super调用构造器必须为子类构造器语句的第一句(上溯执行的表现:当前子类执行构造器是调用super是会直接调用父类构造器,当前子类用this调用本类初始化时会在其他子类构造器里去调用父类构造器,当子类既无this也无super时会隐式调用父类无参构造器一直上溯直到Object。无论什么情况还是会在该类最顶层的继承树开始执行的)
class Person {
public String name ;
public int age ;
public Person(String name ,int age){
this.name = name ;
this.age = age ;
}
}
class Zhangsan extends Person{
public String address ;
public Zhangsan(String name ,int age ,String address){
super(name,age);//通过super来调用父类构造器初始化内容
this.address = address ;
}
public static void main(String args []){
Person per = new Zhangsan("张三" ,18 ,"爱丁堡");
}
}
重写
//定义一个bird类写一个fly方法
public class Bird{
String name ;
int age ;
String sex;
public void fiy(){
System.out.println("fly");
}
}
//Ostrich不会飞
public class Ostrich extends Bird {
public void fly(){
System.out.println("Oh,no!");//这是一个方法的重写
}
}
方法重写遵守
1.方法名相同 , 形参列表相同
2. 子类方法返回值类型应比父类方法返回值类型小或相等,子类方法声明抛出的异常类应比父类方法声明抛出的异常类更小或相等.
3. 子类方法的访问权限应比父类方法的访问权限大或相等.