面向对象(高级)一 下载本文

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 ;