继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
class 父类{
... //成员变量、成员方法
}
class 子类 extends 父类{
... //类体
}
class teacher{ //声明一个teacher类为父类
String name; //定义父类的成员变量name、age
int age;
void show(){ //定义父类成员方法,将成员变量输出
System.out.println(name);
System.out.println(age);
}
}
class Student extends teacher { //声明一个Student类为子类并继承父类
}
public class myfirst {
public static void main(String[] args) {
System.out.println("学生");
Student student=new Student(); //声明一个Student类的实例对象student
student.name="Tom"; //子类调用父类的成员变量name并赋值
student.age=19; //子类调用父类的成员变量age并赋值
student.show(); //子类调用父类的成员方法show
}
}
运行结果:
学生
Tom
19
注:
子类不能选择性继承父类;
Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;
构造方法不会被子类继承,但可以从子类中调用父类的构造方法。
继承的优点
继承过来的字段和方法,可以像任何其他字段和方法一样被直接使用;
在子类中可以声明一个与父类中同名的新字段或静态方法,从而“隐藏”父类中的字段或方法;
可以在子类中声明一个在父类中没有的新字段和方法;
可以在子类中编写一个父类当中具有相同名的新实例方法,这称为“方法重写”或“方法覆盖”;
可以在子类中编写一个调用父类构造方法的子类构造方法,既可以隐式地实现,也可以通过使用关键字super来实现。
重写父类中的方法:
当一个子类中一个实例方法具有与其父类中的一个实例方法相同的签名(指名称、参数个数和类型)和返回值时,称子类中的方法“重写”了父类的方法。例如:
class A{
public void sayHello() { //输出英文欢迎
System.out.println("Hello,Welcome to Java!!!");
}
public void sayBye() {
System.out.println("GoodBye,everyone");
}
}
class B extends A {
public void sayHello() { //输出中文欢迎
System.out.println("大家好,欢迎学习Java!!!");
}
}
public class myfirst {
public static void main(String[] args) {
B b=new B(); //创建子类B的一个实例对象,使用默认构造方法
b.sayHello(); //调用子类中重写的方法
b.sayBye(); //调用父类中的方法
}
}
注:重写的方法具有与其所重写的方法相同的名称、参数数量、类型和返回值。