java 类的继承 学习笔记

继承的概念

继承设计规范

继承的特点

继承后 成员变量、成员方法访问特点

方法重写

子类继承父类后构造器的的特点

继承的概念

  • java中提供一个extends关键字 可以让一个类和另一个类建立父子关系
  • 提高代码复用性 减少代码冗余 增强类的功能和扩展性
public class Student extends People{}
  • Student称为子类(派生类),People 称为父类(基类或超类)
  • 当子类继承父类后 就可以直接使用父类公共的属性和方法 

//人类 父类
public class People {
    public void run(){
        System.out.println("跑——————");
    }
}
//学生类 子类
public class Ssudents extends People {

}
public class Test___ {
    public static void main(String[] args) {
        Ssudents s = new Ssudents();
        s.run();
    }
}
执行结果:

跑——————

继承设计规范

子类相同特征(共性属性 共性方法)放在父类中定义 子类独有的属性和行为定义在子类自己中

设计规范案例:

要求:在教学资源管理系统中 存在学生,老师进入系统。

思路:

  • 学生信息和行为(名称,年龄,所在班级,查看课表,填写听课反馈)
  • 老师信息行为(名称,年龄,部门,查看课表,发布问题)
  • 定义角色类作为父类 含属性(名称,年龄) 行为(查看课表)
  • 定义子类 学生类包含属性(所在班级)行为(填写听课反馈)
  • 定义子类 老师类包含属性(部门名称) 行为(发布问题)
//人类 父类
public class People {
    //公共属性和行为
    private String name;
    private int age;

    public void enquire(){
        System.out.println(name+"在查看课表");
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
//学生类 子类
public class Ssudents extends People {
    //独有行为
    public void wrietInfo(){
        System.out.println(getName()+"  学习知识很快乐!");
    }
}
public class Test___ {
    public static void main(String[] args) {
        Ssudents s = new Ssudents();
        s.setName("奥特曼");
        s.setAge(25);
        System.out.println("同学名叫"+s.getName()+"今年"+s.getAge());
        s.enquire(); //调用父类方法
        s.wrietInfo(); //调用自己的方法
    }
}
执行结果:

同学名叫奥特曼今年25
奥特曼在查看课表
奥特曼  学习知识很快乐!

继承的特点

  • 子类可以继承父类的属性和行为 但是子类不能继承父类的构造器
  • java是单继承模式 一个类只能继承一个直接父类
  • java不支持多继承 但是支持多层继承
  • java中所有的类都是Object类的子类
子类A继承父类B,父类B可以继承父类C

如有多层继承 调用父类有相同方法 则就近调用父类方法
  • 子类不可以继承父类的构造器 子类有自己的构造器 父类构造器用于初始化父类对象 
  • 子类可以继承父类的私有成员 只是不能直接访问(内存运行机制)
  • 子类可以使用父类的静态成员 (共享非继承)

 继承后 成员变量、成员方法访问特点

 在子类方法中访问成员(成员变量 成员方法)时采用就近原则

  • 先到子类局部范围找
  • 然后父类范围找 如果父类范围没找到则会报错
public class test {
    //理解继承后 成员变量、成员方法访问特点
    public static void main(String[] args) {
        Dog d = new Dog();
        d.run();
        d.look();

    }
}

class Animal {
    public void run() {
        System.out.println("动物会跑——");
    }

}

class Dog extends Animal {
    public void look() {
        System.out.println("狗会看门——");
    }

    public void run() {
        System.out.println("狗很会跑"); //就近调用
    }
}
  • 如果子父类中出现了 同名的成员 会优先使用子类的 
  • 这种情况 如果一定要在子类中使用父类 可以通过super关键字 指定访问父类成员
super.父类成员变量/父类成员方法

方法重写

方法重写:指在继承体系中,子类出现了和父类一模一样的方法声明 我们称子类这个方法时重写的方法 

应用需求:

  • 当子类需要父类功能 但父类功能不能完全满足子类自己需求时
  • 子类可以重写父类中的方法
public class testt {
    //认识方法重写
    public static void main(String[] args) {
        newPhone xiaomi = new newPhone();
        xiaomi.call();
        xiaomi.send();
    }
}

//父类
class Phone{
    public void call(){
        System.out.println("打电话");
    }
    public void send(){
        System.out.println("发短信");
    }
}

//子类
class newPhone extends Phone{
    //重写方法
    public void call(){
        super.call(); //调用父类基本功能
        System.out.println("视频通话");
    }

    //重写方法
    public void send(){
        super.send();//调用父类基本功能
        System.out.println("发送视频和图片");
    }

}

@Override重写注解 

  • @Override是放在重写后的方法上 作为重写是否正确的校验注解
  • 加上注解后如有重写错误 会出现错误提示
  • 建议重写方法都加上@Override 使代码更安全 整洁

重写的事项和要求:

重写方法的名称 形参列表必须与被重写方法的名称和参数列表一致 

父类私有方法 子类不能重写

子类不能重写父类的静态方法 否则会报错

子类继承父类后构造器的的特点

子类中所有的构造器默认都会先访问父类中无参构造器 在执行自己

子类构造器的第一行语句默认都是 super 不写也存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

open_test01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值