概念
继承是Java面向对象技术当中的一个概念,多态、封装、继承是面向对象的三个基本特征。继承可以使得子类具有父类的非私有的属性和方法或者重新定义、追加属性和方法等。
实现继承
继承是通过extends关键字来实现的,动物是一个类,动物分很多种所以动物就是父类。猫是动物、狗是动物,那么猫和狗就是子类,能发生继承必须要需要满足条件:什么是什么。
语法:子类 extends 父类
public class FatherClass{
}
public class ChildClass extends FatherClass {
}
继承的优点
1.继承可以优化代码,减少代码的冗余,提高代码的复用性
2.允许开发人员创建出分等级层次的类,避免了对一般类和特殊类之间共同特征进行的重复描述。比如父类有一个 属性,子类只需继承,就不需要再声明了。
继承的特点
1.子类可以去继承父类的非私有属性和方法
2.私有属性和行为不能被继承
3.构造方法不能被继承
4.java中的继承都是单继承,可以实现多重继承(继承具有传递性)
5.继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
案例
编写Person类
属性有:姓名、年龄,出生日期
方法有:showInfo();
编写Student类:
属性有:姓名、年龄,出生日期、学校
方法有:study();
//Person类
public class Person {
String name;//姓名
int age;//年龄
String brithday;//生日
public void showInfo(){
System.out.println("姓名:"+this.name+",年龄:"+age+",生日:"+this.brithday);
}
}
public class Student extends Person{
String schoolName;//学校名
//无参构造
public Student() {
super();
}
//有参构造
public Student(String name, int age, String brithday,String schoolName){
this.name = name;
this.age = age;
this.brithday = brithday;
this.schoolName=schoolName;
}
public void study(){
System.out.println("好好学习");
}
}
public class Demo {
public static void main(String[] args) {
Student s=new Student();
s.name="张三";
s.brithday="1999.10.10";
s.age=18;
s.showInfo();
s.study();
}
}
结果:姓名:张三,年龄:18,生日:1999.10.10
好好学习
方法的重写
在继承过程中,子类中从父类继承来的方法无法满足自己的需求时,可以在子类中对父类方法进行完善,这个完善过程叫做方法重写(override),方法的重写相当于在子类中覆盖父类中的方法。
1.重写的要求
首先必须两者具有继承关系,重写相当于子类用自己的方法去覆盖了继承自来自父类的方法的方法体
2.继承的语法
方法上一定要有@Override这样的注解来标识该方法是重写
重写的方法不能拥有比父类方法更严格的权限修饰符
重写的方法和被重写的方法具有相同的返回值,方法名,参数列表
方法的重写案例
编写Person类
属性有:姓名、年龄,出生日期
方法有:showInfo();
编写Student类:
属性有:姓名、年龄,出生日期、学校
方法有:study();
showInfo();
//Person类
public class Person {
String name;//姓名
int age;//年龄
String brithday;//生日
public void showInfo(){
System.out.println("姓名:"+this.name+",年龄:"+age+",生日:"+this.brithday);
}
}
public class Student extends Person{
String schoolName;//学校名
public Student() {
super();
}
public Student(String name, int age, String brithday,String schoolName){
this.name = name;
this.age = age;
this.brithday = brithday;
this.schoolName=schoolName;
}
public void study(){
System.out.println("好好学习");
}
@Override
public void showInfo(){
System.out.println("姓名:"+this.name+",年龄:"+age+",生日:"+this.brithday+",学校名称:"+this.schoolName);
}
}
public class Demo {
public static void main(String[] args) {
Student s=new Student();
s.name="张三";
s.brithday="1999.10.10";
s.age=18;
s.showInfo();
s.study();
}
}
结果:姓名:张三,年龄:18,生日:1999.10.10,学校名称:xx学校
好好学习