继承的特点:
- 继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
- extends的意思是扩展。子类是父类的扩展
- Java中类只有单继承,没有多继承
- 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示
- objeclei
- super
- 方法重写
实例演练:
- 创建一个Person类作为子类并在类中定义一个run方法,代码如下:
//父类
public class Person {
public void run(){
System.out.println("person");
}
}
- 创建子类Student并定义一个study方法,创建子类Teacher并定义一个teach方法,代码分别如下:
//子类——学生类
public class Student extends Person{
public void study(){
System.out.println("study");
}
}
//子类——教师类
public class Teacher extends Person{
public void teach(){
System.out.println("teach");
}
}
- 接着创建一个main类,并分别创建三种对象,代码如下:
public class main {
public static void main(String[] args) {
Person person=new Person();
Student student=new Student();
Teacher teacher=new Teacher();
}
}
- person对象能调用的方法如下,可以看出只有run方法
- student对象能调用的方法如下,可以看出有run方法和study方法
- teacher对象能调用的方法如下,可以看出能调用run方法和teach方法
综上,我们可以得到以下结论:
- 父类不能调用子类的方法,只能调用自身的方法
- 子类能调用父类和自身的方法
- 子类不能调用其他子类的方法
tips:按Ctrl+H可查看关系树
四种修饰符
按优先级排序:
- public
- protected
- dafault
- private
我们在Person类中用四种修饰符定义四个方法:
//父类
public class Person {
public void run(){
System.out.println("person");
}
private void walk(){
System.out.println("walk");
}
protected void eat(){
System.out.println("eat");
}
void swim(){
System.out.println("swim");
}
}
可以看出看子类student除了walk方法其他的方法都可以调用
结论:在父类中用private修饰符定义的方法子类不能调用(父类中的属性同样适用)
另外,在父类中一般都是private属性,代码如下:
//父类
public class Person {
private int money=100;
public void setMoney(int money){
this.money=money;
}
public int getMoney(){
return money;
}
}
父类Person中的私有属性money在子类中不能直接调用和查看,通常我们用另外两个方法set和return使得在子类中能对父类中的私有属性进行操作
public class main {
public static void main(String[] args) {
Person person=new Person();
person.run();
Student student=new Student();
student.run();
Teacher teacher=new Teacher();
teacher.run();
int money=student.getMoney();
System.out.println(money);
student.setMoney(200);
money=student.getMoney();
System.out.println(money);
}
}
运行结果如下:
可以看到虽然money是父类中的私有属性,但是我们也能通过调用方法来输出money的值和对其进行修改
Object类
在之前的子类中我们可以看到除了父类和自身的方法以外还有很多没见过的方法,这些方法就是Object类中的方法
在Java中,所有的类都默认直接或者间接继承Object类,可以说Object类是所有类的祖宗类