0基础学java day09(继承)

笔记在最后面的总结,如果对继承还不了解的话,可以先到最后看笔记。

1、定义一个Person类作为父类

package ooday02;
/**
人---超类、基类、父类
 */
public class Person {
       String name;
       int age;
       String address;

       /*Person(){};*///默认的构造方法
       Person(String name,int age,String address){//重写了父类的构造方法
           this.name=name;
           this.age=age;
           this.address=address;
       };
       //普通方法
       void eat(){
           System.out.println(name+"正在吃饭");
       }
       void sleep(){
           System.out.println(name+"正在睡觉");
       }
       void sayHi(){
           System.out.println("大家好,我叫"+name+ ",我今年"+age+"岁了"+"我来自"+address);
       }
}

2、定义一个Student类来继承Person

Student里面新定义了classname、stuId   新加了study()和sayHi()方法

package ooday02;
/**
 * 学生---派生类、子类
 */
public class Student extends Person {
    String className;
    String stuId;
    //this指Student对象 super指Person对象
   /* Student(){};*/
    Student(String name,int age,String address, String className,String stuId){
        //成员变量name若没有同名现象:写this.name和super.name都一样
        //成员变量若是有name   super.name指的是超类的name this.name指的是当前类的name
       /* this.name=name;
        this.age=age;
        this.address=address;*///传递的是name、age、address的值
        super(name,age,address);
        this.className=className;
        this.stuId=stuId;
    }

    void  study(){
        System.out.println(name+"正在学习");
    }
    void sayHi(){
        System.out.println("大家好,我叫"+name+ ",我今年"+age+"岁了"
                +"我来自"+address+"我在"+className+"班"+"学号为"+stuId);
    }
    
}

3、定义一个老师类继承Person

Teacher里面新定义了salary 加入了teach()方法

package ooday02;
/**
 *老师---派生类、子类
 */
public class Teacher extends Person {
    double salary;
   /* Teacher(){};*/
    Teacher(String name,int age,String address,double salary){
       /* this.name=name;
        this.age=age;
        this.address=address;*/
        super(name,age,address);
        this.salary=salary;
    };
    void teach(){
        System.out.println(name+"正在上课");
    }
    void sayHi(){
        System.out.println("大家好,我叫"+name+ ",我今年"+age+"岁了"
                +"我来自"+address+"我的工资为"+salary);
    }

}

4、定义一个医生类继承Person

Doctor里面新定义了title   加入了cut()方法

package ooday02;
/**
 * 医生---派生类、子类
 */
public class Doctor extends Person {
    String title;
   /* Doctor(){};*/
    Doctor(String name,int age,String address,String title){
        /*this.name=name;
        this.age=age;
        this.address=address;*/
        super(name,age,address);
        this.title=title;
    };
    
    void cut(){
        System.out.println(name+"正在手术");
    }
}

5、接着建一个继承的测试类,来测试前几步的代码(有两种new方法一种复杂一种简便)

package ooday02;

public class ExtendsTest {
    public static void main(String[] args) {
        //创建学生对象
        /*//1)
        Student zs=new Student();
        zs.name="张三";
        zs.age=25;
        zs.address="廊坊";
        zs.className="jsd2302";
        zs.stuId="001";
        zs.eat();
        zs.sleep();
        zs.sayHi();
        zs.study();
 */
        //2)学生构造方法
        Student zss=new Student("张三三",15,
                "南京","jsd2302","002");
        zss.eat();
        zss.sleep();
        zss.sayHi();
        zss.study();
        System.out.println();

        //创建老师对象
        //1)
        /*Teacher ls=new Teacher();
        ls.name="李四";
        ls.age=38;
        ls.address="北京";
        ls.salary=6000;
        ls.eat();
        ls.sleep();
        ls.sayHi();
        ls.teach();*/
        //2)老师构造方法
        Teacher lss=new Teacher("李四四",38,"北京",
                8000);
        lss.eat();
        lss.sleep();
        lss.sayHi();
        lss.teach();
        System.out.println();

        //创建医生对象
        //1)
        /*Doctor ww=new Doctor();
        ww.name="王五";
        ww.age=40;
        ww.address="上海";
        ww.title="副主任医师";
        ww.eat();
        ww.sleep();
        ww.sayHi();
        ww.cut();*/
        //2)医生构造方法
        Doctor www=new Doctor("王五五",40,"上海",
                "副主任医师");
        www.eat();
        www.sleep();
        www.sayHi();
        www.cut();
        System.out.println();
    }

}

笔记:
1. 继承:
           作用:代码复用
           通过extends实现继承
           超类/基类/父类:共有的属性和行为
           派生类/子类:特有的属性和行为
           派生类可以访问:超类的+派生类的,超类不能访问派生类的
           一个超类可以有多个派生类,一个派生类只能有一个超类---------单一继承具有传递性
           java规定:构造派生类之前必须先构造超类
           在派生类的构造方法中若没有调用超类的构造方法,则默认super()调用超类的无参构造方法
           在派生类的构造方法中若自己调用了超类的构造方法,则不再默认提供
           注意:super()调用超类构造方法,必须位于派生类构造方法中的第1行
2. super:指代当前对象的超类对象
           super.成员变量名-------------------------访问超类的成员变量
           当超类成员变量和派生类成员变量同名时,super指超类的,this指派生类的
           若没有同名现象,则写super和this是一样的
           super.方法名()------------------------------调用超类的方法
           super()----------------------------------------调用超类的构造方法
3. 方法的重写(override/overriding):重新写、覆盖
           发生在父子类中,方法名相同,参数列表相同
           重写方法被调用时,看对象的类型---------------new谁就调谁的,这是规定
补充:
1. 泛化:从程序设计角度而言叫泛化,从代码实现角度而言叫继承,泛化就是继承
2. 继承要符合is(是)的关系
3. 继承的是超类的成员变量和普通方法,不包括超类的构造方法,超类的构造方法是被派生类通过super()来调用的,而不是继承的
class Aoo{
           int a;
           Aoo(){
           }
           void show(){
           }
}
           class Boo extends Aoo{
           继承了Aoo类的a+show(),并没有继承Aoo类的构造方法
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值