我们在上一篇文章中,了解到了封装,我们本篇文章来介绍一下面向对象的第二大特点,继承,还是遵循结合现实生活中的实际情况,理解着去学习,能更好的加深印象。
我们新建一个软件包,然后在这个里面,新建一个人类,学生类,老师类。
package oop.Demo05;
//Person 人 : 父类
public class Person
{
}
我们知道,学生类也是人类,所以我们新建一个学生类,然后继承人类。
package oop.Demo05;
//学生 is 人 : 派生类(子类)
public class Student extends Person
{
}
老师类也是人类,我们再新建一个老师类,然后继承人类。
package oop.Demo05;
//Teacher is 人 : 派生类(子类)
public class Teacher extends Person
{
}
java类中,只有单继承,没有多继承!
继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等。
继承关系的两个类,一个是子类(派生类),一个为父类(基类),子类继承父类,使用关键字extends来表示。
子类和父类之间,从意义上讲应该具有“ is a”的关系。
子类可以继承父类的所有方法。
1、我们在父类(Person类)中,定义一个方法,“说你好”的方法。
package oop.Demo05;
//Person 人
public class Person {
public void say()
{
System.out.println("Hello");
}
}
2、我们的子类(Student类)继承了父类,所以在Student类里面我们什么方法都不写。
package oop.Demo05;
//学生 is 人 : 派生类(子类)
public class Student extends Person
{
}
3、我们通过main方法,来new一个Student类的对象,看是否可以调用方法。
package oop.Demo02;
import oop.Demo05.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
student.say();//发现这里可以直接调用
}
}
我们执行以下代码,可以看到输出结果。
Hello
进程结束.......
4、不光子类可以继承父类的方法,还可以继承属性,但是前提是,父类中的属性是public!
package oop.Demo05;
//Person 人
public class Person {
public int money=10_0000_0000;
public void say()
{
System.out.println("Hello");
}
}
我们输出一下student.money。
package oop.Demo02;
import oop.Demo05.Student;
public class Application {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.money);
}
}
我们执行以下代码,可以看到输出结果。
1000000000
进程结束.......
5、但是如果把修饰符public公有的,换成private私有的,继承了也无法调用。
public(公有的)
default(默认的)
protected(受保护的,protected与private基本相似,只有在继承时有较大的区别。继承的类可以访问protected成员,但是不能访问private成员。)
private(私有的)
虽然私有的属性无法被继承,但是可以用get set方法,去变相调用。
我们在子类或者父类里面,按下Ctrl+H 就会跳转到继承结构。
在这里我们发现,Person上面还有一个类,Object,Person类继承了Object类。
如果我们在Person中,什么方法也不写,但是创建一个person对象的时候,仍然可以使用方法,如下代码。
package oop.Demo02;
import oop.Demo05.Person;
public class Application {
public static void main(String[] args) {
Person person = new Person();
person.hashCode();//依旧可以使用方法
}
}
在java中,所有的类,都默认直接或者间接继承Object类。
继承里面还有两个重点,一个super,一个方法的重写,我们放在后边详细去说明。
java类中,只有单继承,没有多继承!
一个儿子只能有一个爸爸,一个爸爸可以有多个儿子,就是学生类可以继承人类,但是人类可以被老师类继承。