继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
1.语法格式
class Father{ //父类
}
class Son extends Father { //子类Son extends继承 父类Father
}
例如
class Teacher { //声明一个父类 Teacher
String name;
int age;
public void eat() {
System.out.println("吃午饭");
}
}
class Student extends Teacher { //声明一个子类Student 用关键字extends 继承 父类Teacher
}
public class Task {
public static void main(String[] args) {
Student student = new Student(); //声明一个Student类的实例对象student
student.name = "小明";
student.age = 20;
student.eat();
System.out.println(student.name);
System.out.println(student.age);
}
}
运行结果为:
吃午饭
小明
20
注意
1.至少两个类,使用关键字extends以后 子类就继承了父类 就意味着子类可以使用父类的某些属性和方法
2.但是子类无法继承父类私有的属性和方法
3.构造方法 先执行父类的构造方法,在执行子类的构造方法,父类与子类的构造方法的形式保持一致。父类中有无参构造,子类也有无参构造。父类中没有无参构造,子类也没有无参构造方法。
2.重写
重写的目的: 子类可以继承父类非私有的方法,但有时候父类中的方法无法满足子类的需求,这个时候需要在子类中重写父类非私有的方法。
package com.qfedu.a_demo;
class Teacher {
String name;
int age;
public void eat() {
System.out.println("吃午饭");
}
public void hello() {
System.out.println("Hello Java!");
}
}
class Student extends Teacher {
@Override //@Override是重写的严格限定,只要有这个,就证明这个下面的方法是重写的
public void eat() {
System.out.println("吃海底捞");
}
}
public class Task {
public static void main(String[] args) {
Student student = new Student();
student.name = "小明";
student.age = 20;
student.eat();
student.hello();
System.out.println(student.name);
System.out.println(student.age);
}
}
运行结果
吃海底捞
Hello Java!
小明
20
注意:
1.必须有继承关系
2.父类的方法必须是非私有化的
3.在子类中重写父类的方法,这个方法除了方法体不一样其他都一样
4.必须在子类中重写
3.用set,get方法调用父类private私有成员
package com.qfedu.a_demo;
class Teacher {
String name;
private int age; //声明一个私有的成员变量
public int getAge() { // get方法取值
return age;
}
public void setAge(int age) { //set方法赋值
this.age = age;
}
public void eat() {
System.out.println("吃午饭");
}
public void hello() {
System.out.println("Hello Java!");
}
}
class Student extends Teacher {
@Override
public void eat() {
System.out.println("吃海底捞");
}
}
public class Task {
public static void main(String[] args) {
Student student = new Student();
student.name = "小明";
// student.age = 20;
student.eat();
student.hello();
student.setAge(21); //set赋值
System.out.println(student.name);
//System.out.println(20);
System.out.println(student.getAge()); //get取值
}
}
运行结果为
吃海底捞
Hello Java!
小明
21