当多个类之间有相同的特征和行为时,就可以将相同的内容提取出来组成一个新类,让原来的这些类继承自新类即可,从而实现原来的这些类吸收新类中成员的效果,此时在原来这些类中只需要编写自己独有的成员即可。
在Java语言中使用extends关键字来表达继承的关系。
编写父类 : 编程实现Person类的封装
public class Person{
//1.编写私有化成员变量
private String name; //用于描述姓名的成员变量
private int age; //用于描述年龄的成员变量
//3.编写无参构造方法和有参构造方法
//在有参构造方法中调用set成员变量的方法进行合理值的判断
public Person(){
System.out.println("Person()");
}
public Person(String name, int age){
setName(name);
setAge(age);
}
//2.提供公有的get成员变量和set成员变量的方法,并在方法体中进行合理性的判断
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
if(age > 0 && age < 150){
this.age = age;
}
else{
System.out.println("年龄不合理!!!");
}
}
//编写打印特征的成员方法
public void show(){
System.out.println("我是" + getName() + ",今年" + getAge() + "岁了!");
}
}
编写子类:实现Student类的封装并继承自Person类
// 子类 继承 父类
public class Student extends Person{
//1.编写子类自己的私有化成员变量
private int id;
//3.编写子类无参和有参的构造方法
public Student(){
super(); //表示调用父类中的无参构造方法,编译器会自动添加
}
public Student(String name, int age, int id){
super(name, age); //表示调用父类中的有参构造方法
setId(id);
}
//2.提供公有的get成员变量和set成员变量的方法
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
//标注,用于明确告诉编译器下面的方法是对父类中方法的重写,若没有构成重写则报错
@Override
public void show(){
//调用父类中的show()方法就可以打印姓名和年龄了
super.show();
System.out.println("我的学号是:"
编程实现Student类的测试
public class TestStudent{
public static void main(String[] args){
Student s1 = new Student();
s1.show();
Student s2 = new Student("zhangfei", 30, 1001);
//当子类中没有重写show()方法时,调用从父类中继承的show()方法
//当子类中重写show()方法后,则调用子类重写以后的show()方法
一、封装类步骤
1)、编写私有化成员变量,使用private关键字修饰;
2)、提供公有的get成员变量和set成员变量方法,在方法体中进行合理值的判断;
3)、在构造方法体中调用set成员方法进行合理值的判断;
二、继承
使用extends关键字继承父类
1)、编写子类自己的私有化成员变量
2)、提供公有的get成员变量和set成员变量的方法
如需要使用标注@Override 对父类中成员方法进行重写,super.父类成员方法名(),即调用父类成员方法。
在调用子类自己的成员方法。
3)、编写子类无参和有参的构造方法
在子类的无参构造方法中写上super(),表示调用父类中的无参构造方法,编译器会自动添加;
在子类的有参构造方法中写上形参,并在super()方法中传入形参,表示调用父类中的有参构造方法
再在子类的有参构造方法中调用子类的成员方法。
注意事项:
(1)子类可以继承父类中的成员变量,包括私有成员变量,但是不能直接访问。
子类不可以直接继承父类中的构造方法以及私有成员方法。
(2)构造子类对象是会自动调用父类中的无参构造函数,用于初始化从父类中继承下来的成员变量信息,相当于在子类构造方法中的第一行增加代码:super();
(3)在java语言中只支持单继承,也就是一个子类只能有一个父类,但一个父类可以有多个子类。
(4)只有满足:子类 is a 父类 的逻辑关系才能继承,不能滥用继承。
super关键字和this关键字的比较
1)、基本概念
this关键字用于代表本类的对象;
super关键字用于代表父类的对象;
2)使用方式
使用this.的方式可以访问本类的成员变量和成员方法;
使用super.的方式可以访问父类的成员变量和成员方法;