1、课程名称:面向对象高级
继承的定义、实现、限制要求、super关键字、方法的覆写、接口与抽象类 2、知识点
2.1、上次课程的主要知识点 1、 static关键字 2、 内部类 3、 对象数组
2.2、本次预计讲解的知识点 1、 继承的产生
2、 继承的具体实现及主要要求 3、 方法的重载与覆写 4、 this与super关键字 5、 final关键字的作用
6、 接口与抽象类的基本概念 3、具体内容
3.1、为什么要有继承
现在定义两个类:Person、Student,按照之前的方式进行定义。 class Person{
private String name ; private int age ;
public void setName(String name){ this.name = name ; }
public void setAge(int age){ this.age = age ; }
public String getName(){ return this.name ; }
public int getAge(){ return this.age ; } };
class Student{
private String name ; private int age ;
private String school ;
public void setName(String name){ this.name = name ; }
public void setSchool(String school){ this.school = school ; }
public void setAge(int age){
this.age = age ; }
public String getSchool(){ return this.school ; }
public String getName(){ return this.name ; }
public int getAge(){ return this.age ; } };
在上面的代码之中存在了重复。学生是一个人。但是学生比人本身只多了一个学校的属性。如果现在按照之前的方式编写代码,则会发现会重复定义很多的属性或方法,那么此时,就需要通过继承来对程序进行进一步的扩展。 3.2、继承基本样式
继承(extends):表示扩展。扩展已有类的功能。 继承在程序中通过extends关键字实现,语法如下: class 子类 extends 父类{}
例如:现在让学生类直接继承了Person类 class Person{
private String name ; private int age ;
public void setName(String name){ this.name = name ; }
public void setAge(int age){ this.age = age ; }
public String getName(){ return this.name ; }
public int getAge(){ return this.age ; } };
class Student extends Person{ };
public class OODemo02{
public static void main(String args[]){ Student s = new Student() ; s.setName(\张三\ s.setAge(30) ;
System.out.println(\姓名:\;年龄:\
} };
在以上的学生类中并没有定义了姓名和年龄的属性及setter、getter方法,但是现在通过继承却可以把内容直接拿到学生类去使用,所以此时称学生继承了人类。
继承属于扩充类的功能,所以此时,直接在学生类中加入自己扩充的属性即可。 class Person{
private String name ; private int age ;
public void setName(String name){ this.name = name ; }
public void setAge(int age){ this.age = age ; }
public String getName(){ return this.name ; }
public int getAge(){ return this.age ; } };
class Student extends Person{ private String school ;
public void setSchool(String school){ this.school = school ; }
public String getSchool(){ return this.school ; } };
public class OODemo03{
public static void main(String args[]){ Student s = new Student() ; s.setName(\张三\ s.setAge(30) ;
s.setSchool(\北京大学\ System.out.println(\姓名:\;年龄:\;学校:\ } };
可以发现,子类现在已经扩充类父类的已有功能。 3.3、继承的约定 3.3.1、约定一
在JAVA中一个子类只能继承一个父类,即:一个儿子只有一个老爸。所以在JAVA中属于单继承。
多继承:
在其他语言中,例如C++,语法是支持多继承的,基本的样式: class 子类 extends 父1,父2,…{}
在JAVA中允许多层继承。多层继承的时候子类会拥有所有的属性和方法。 class A{ };
class B extends A{ };
class C extends B{ };
3.3.2、约定二
对于子类而言,可以继承父类中的一切内容,但是对于私有化的内容,都采用隐含的继承方式。
3.3.3、约定三
对已有的程序进行一些扩充。
在Person类中加入一个构造方法,可以同时为name和age属性赋值。 之后再加入一个打印信息的方法,可以取得一个人员的信息。 class Person{
private String name ; private int age ;
public Person(String name,int age){ this.setName(name) ; this.setAge(age) ; }
public void setName(String name){ this.name = name ; }
public void setAge(int age){ this.age = age ; }
public String getName(){ return this.name ; }
public int getAge(){ return this.age ; }
public String getInfo(){
return \姓名:\,年龄:\ } };
class Student extends Person{ private String school ;
public void setSchool(String school){ this.school = school ;