1.继承
继承是面向对象三大特征之一,子类可以继承父类中的属性和方法,并且可以重新定义并添加新的属性和方法。
2.继承的格式
格式:public class 子类名 extends 父类名{}
【子类也被称为派生类】
【父类也被成为基类,超类】
例如:创建一个父类Father
在父类中定义方法a来执行输出语句“我是父类”
/*父类*/
public class Father {
/*定义一个方法a*/
public void a(){
System.out.println("我是父类");
}
}
创建一个子类Son
/*子类
* extends Father表示已经继承了父类中的属性与方法*/
public class Son extends Father {
}
创建一个测试类Test
/*测试类*/
public class Test {
/*main函数————程序的主入口*/
public static void main(String[] args) {
Son aaa=new Son();
aaa.a();
}
}
执行结果
这里可以看出子类Son继承并调用了父类中的方法a,并实现了输出。
3.继承的优点
提高了代码的复用性,父类定义的内容,子类可以直接拿过来用就可以了,不用代码上反复重复定义了。
【父类private修饰的内容,子类实际上也继承,只是因为封装的特性阻碍了直接调用,但是提供了间接调用的方式,可以间接调用。】
4.方法的重写
(1)重写:发生在子类和父类中,当子类对父类提供的方法不满意的时候,要对父类的方法进行重写。
(2)重写格式:重写有着严格的格式要求,子类方法名字和父类必须一致,参数列表(个数,类型,顺序)也要和父类一致。
例如:创建一个父类Father
其中,定义一个方法eat
/*父类*/
public class Father {
/*定义一个方法a*/
public void eat(){
System.out.println("我爱吃鸡蛋");
}
}
创建一个子类
其中继承父类的方法eat,但是进行了重写,输出语句有所不同
/*子类
* extends Father表示已经继承了父类中的属性与方法*/
public class Son extends Father {
public void eat(){
System.out.println("我爱吃红烧肉");
}
}
创建一个测试类
/*测试类*/
public class Test {
/*main函数————程序的主入口*/
public static void main(String[] args) {
/*创建一个Son类的对象*/
Son aaa=new Son();
aaa.eat();
}
}
输出结果
可以看出,调用的方法eat已经重写成功。
5.super修饰构造器
子类构造一定会调用父类构造,一般用super 关键字来调用,如果没有写,则程序会自动帮忙调用父类的无参构造。
例如:
【在调用的时候,super 代码必须位于子类构造方法中代码的第一行】
例如,放在了第二行,立马报错
6.Object类
所有类都直接或间接的继承子Object类,Object类是所有java类的根基类,这意味着所有的java对象都拥有Object类的属性和方法,如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。
7.Java中继承的注意事项
Java中类只支持单继承,可以多层继承,一个类继承一个类,但是不支持多继承,指一个子类继承多个父类。
8.小练习----军人与医生
要求:
1.请使用面向对象的思想,设计自定义类描述医生和军人类
2.分析医生和军人的公共成员,提取出父类---人类
3.利用继承机制,实现医生类和军人类
4.利用封装机制,设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问 5、 5.编写测试类,分别测试人类,医生类和军人类的对象及相关方法(测试数据信息自定) 6、 6.定义名为doc的包存放人类、医生类、军人类和测试类
参考分析思路:
医生类:
属性包括:姓名,年龄,性别,所在科室,职务
方法包括:工作
军人类: 属性包括:姓名,年龄,性别,所属部队,职务,军龄
方法包括:工作
1.定义一个父类People
public class People {
private String name;
private String sex;
private int age;
private String zhiwu;
private String zhiye;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getZhiwu() {
return zhiwu;
}
public void setZhiwu(String zhiwu) {
this.zhiwu = zhiwu;
}
public String getZhiye() {
return zhiye;
}
public void setZhiye(String zhiye) {
this.zhiye = zhiye;
}
public People(){}
public People(String name,String sex,int age,String zhiwu,String zhiye){
this.setAge(age);
this.setName(name);
this.setSex(sex);
this.setZhiwu(zhiwu);
this.setZhiye(zhiye);
}
}
2.定义一个Solider类
public class Soldier extends People {
private String ssbudui;
private int time;
public String getSsbudui() {
return ssbudui;
}
public void setSsbudui(String ssbudui) {
this.ssbudui = ssbudui;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
public Soldier(){}
public Soldier(String ssbudui,int time){
this.setTime(time);
this.setSsbudui(ssbudui);
}
public void work1(){
System.out.println("姓名:"+getName());
System.out.println("职业:"+getZhiye());
System.out.println("年龄:"+getAge());
System.out.println("所属部队"+ssbudui);
System.out.println("职务:"+getZhiwu());
System.out.println("军龄:"+time);
}
}
3.定义一个Doctor类
public class Doctor extends People{
private String szkeshi;
public String getSzkeshi() {
return szkeshi;
}
public void setSzkeshi(String szkeshi) {
this.szkeshi = szkeshi;
}
public Doctor(){}
public Doctor(String szkeshi){
this.setSzkeshi(szkeshi);
}
public void work2(){
System.out.println("姓名:"+getName());
System.out.println("职业:"+getZhiye());
System.out.println("年龄:"+getAge());
System.out.println("所在科室:"+szkeshi);
System.out.println("职务:"+getZhiwu());
}
}
4.测试
public class Test {
public static void main(String[] args) {
Soldier aaa=new Soldier();
aaa.setSsbudui("北京军区");
aaa.setTime(43);
aaa.setName("刘天明");
aaa.setAge(62);
aaa.setZhiye("军人");
aaa.setZhiwu("军区司令员");
Doctor bbb=new Doctor();
bbb.setSzkeshi("内科");
bbb.setName("刘新");
bbb.setAge(23);
bbb.setZhiwu("主任医师");
bbb.setZhiye("医生");
System.out.println("我是普通人,要工作才有饭吃");
System.out.println("=========================");
aaa.work1();
System.out.println("=========================");
bbb.work2();
}
}
5.运行结果