继承
继承是面向对象的三大特征之一,也是实现软件复用的一个手段。java的继承具有单继承的特点(简单理解一个儿子只能有一个爸爸),每个子类只有一个直接父类,但是一类可以有多个子类(除final类型的类)。
继承的特点:
java的继承通过extends 关键字来实现,实现继承的类被称为子类,被继承的类被成为父类,有的也成为基类、超类。如上图
/** * 作为父类的类 * @author GMZ * */ public class ClassParent { public String name; public String age; public ClassParent(){} //重载的构造方法 public ClassParent(String name){ this.name = name; } //重载构造方法 public ClassParent(String name , String age){ this(name); this.age = age; } public void eat(){ System.out.println("parent---------------->eat_method"); } // 重载 eat方法 protected String eat(String name){ System.out.println("parent---------------->eat_method"+name); return this.name; } }
/** * 作为子类的类 用关键extends来实现 继承 * @author Administrator * */public class ClassPosterity extends ClassParent { //通过super调用父类的构造方法 来为父类的属性赋值 public ClassPosterity(String name ,String age){ super(name,age); } //@Override代表的是重写 继承的子类重写父类的方法 @Override public void eat(){ System.out.println("posterity---------------->eat_method"); }}
这里面出现了几个关键字和重写还有方法的重载,我们一个一个来说。
方法的重写:
子类可以根据自己的需求对父类继承的方法进行重新编写,成为方法的重写或者说是方法的覆盖。重写有几个特点
1. 重写方法和被重写方法必须具有相同的方法名。
2.重写方法和被重写方法必须具有相同的参数列表
3.重写方法返回值类型必须和被重写方法的返回值类型相同或是其子类
4.重写方法不能缩小被重写方法的访问权限。(例如:public不能是private)
方法的重载:
同一个类中多个方法名相同,参数列表不同为方法的重载。重载有几个特点:
1.方法的重载只在本类中。
2.方法的重载只与方法名有关与其他无关(返回值类型,参数列表,访问修饰符)
super关键字
super代表当前对象的直接父类对象的默认引用。在子类中可以用super关键字来访问父类中的成员。它也有几个特点
1.super必须出现在子类(子类的方法和构造方法)中,而不是其他位置
2.可以访问父类的成员,如父类的属性、方法、构造方法。
3.super无法访问private修饰的成员。
抽象类
在类中还有只用特殊类抽象类。
/** * 抽象类 关键子 abstract * @author GMZ * 抽象类是不能被实例化的。 */ public abstract class ClassAbstract { public String name; public String age; public void eat(){ System.out.println("--------------------->eat"); } //抽象方法,抽象方法没有方法体 ,当子类(非抽象子类)继承这个类时必须重写这个方法,否则无法实例化,除非子类也是抽象类。 //抽象类继承抽象类是可以不用实现抽象方法的 public abstract void playLOL(); }
抽象类和抽象方法的特点如下:
1.抽象类和抽象方法都能通过abstract关键字来修饰。
2.抽象类不能被实例化,抽象类中可以没有或者有一个或者多个抽象方法,甚至全部方法都是抽象方法。
3.抽象方法只有能方法声明,没有具体的代码块(方法实现),有抽象方法的类必须声明为抽象类,当一个类继承了抽象类,那么它必须重写父类中所有的抽象方法才能被实例化,否则子类还是一个抽象类。