高级类特性
面向对象特征之二:继承
- 为描述和处理个人信息,定义Person:
person |
---|
+name:String ;+age:int |
+getInfo():String |
public class Person{
public String name;
public int age;
public String getInfo(){
…
}
}
- 现在想多加几个类。如:
- 学生类:姓名,性别,年龄,学校,打印信息的方法
- 工人类:姓名,性别,年龄,工种,打印信息的方法
- 教师类:姓名,性别,年龄,科目,打印信息的方法
如果直接重复写,工作量会增加。
但是使用extends(继承)
简化Student类,只用再写
+school:String;
-
为什么要继承?
- 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需要定义这些属性和行为,只要继承那个类即可。(把共性的东西抽取出来形成父类实际需求的字类再继承父类的基础上写自己的特有代码即可)
-
此处的多个类称为子类,单独的这个类称为父类(基类或超类)。可以理解为:“字类 is a 父类”
-
类继承语法规则:
class Subclass extends Superclass{}
作用:
-
继承的出现提高了代码的复用性
-
继承的出现让类与类之间产生了关系,提供了多态的前提
-
不要仅为了获取其他类中某个功能而去继承(继承要有逻辑关系在里面,不要随意继承)
例如:狗(名字,性别,年龄,品种),那狗能不能继承人的类?- 不能,不能为了使用人类的相近属性而继承。狗和人不是一个物种。如果想做个狗的父类,就要写一个动物类。
-
字类继承了父类,就继承了父类的方法和属性
-
在字类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法。
-
在java中,继承的关键字用的是**“extends”,即子类不是父类的子集**,而是对父类的“扩展”。
关于继承的规则:
-
子类不能直接访问父类中私有的(private)的成员变量和方法。
-
Java只支持单继承,不允许多重继承
- 一个子类只能有一个父类
- 一个父类可以派生出多个字类
- class SubDemo extends Demo{}//ok
- class SubDemo extends Demo1,Demo2…//error
练习1
- 1.定义一个ManKind类,包括:
- 成员变量int sex和int salary;
- 方法void manOrWoman():根据sex的值显示“man"(sex= =1)或者"woman(sex== 0 )";
- 方法void employeed():根据salary的值显示”no job“(salary==0)或者”job"(salary!=0)
- 定义类Kids继承ManKind,并包括
- 成员变量int yearsOld;
- 方法print Age()打印yearsOld的值
- 在Kids类的main方法中实例化Kids的对象someKid,用该对象访问其父类的成员变量及方法。
ManKind.java
package lianxi1;
public class ManKind {
int sex;
int salary;
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public void manOrWoman() {
if(this.sex==1)