JavaSE基础自学---面向对象---继承

继承

  • 提高代码复用性
  • 让类与类之间产生关系,有了这个关系才能体现多态的特性
  • Java中只支持单继承.不支持多继承 :因为有安全隐患…当多个父类都定义了相同的功能,子类对象就不确定要运行哪一个… 但是java保留了这种机制,用另一种形式来表示—多实现
  • Java支持多层继承.例如:A被B继承…B也可以被C继承

继承----变量

如果子类出现与父类 同名变量 时.
子类要访问本类对象变量用 this
子类要访问父类同名变量用 super
super 与this 的使用几乎一致
父类变量被private后,子类不可访问

简单代码展示----

class fu{
    int num=6; 
}

class zi  extends fu{
    int num=5;
    public void zi(){
        System.out.println(num);        //访问了本类num变量
        System.out.println(super.num);  //访问了父类num变量
    }
}


继承----函数重写(覆盖)

  • 当子类继承父类,子类出现和父类相同的函数时,且该函数内容与父类不相同,这种情况就是重写了父类的函数… 简单说就是子类有与父类相同的功能,但功能内容不相同
  • 子类想要重写父类的函数,必须保证子类权限大于等于父类权限,否则会编译失败()
  • 重写不等于重载
  • 重写时,如果想继续引用父类功能内容,可以 同super. 函数名

简单代码展示----

class fu{
    public  void method(){
        System.out.println("父类方法");
    }
}

class zi  extends fu{
    public  void method(){

        super.method();   //super引用父类功能内容
        System.out.println("子类重写method");

    }
}


继承----子父类中的构造函数( super() )

  • 在子类对象初始化的时候,父类的空参数构造函数也会运行…那是因为子类构造函数第一行默认有一条隐藏语句 :super();
  • super()----会访问父类中的空参数构造函数,且子类所有构造函数默认第一行都是super().
  • 为什么子类一定要访问父类中的构造函数----因为父类中的数据,子类是直接获取的,当子类对象建立时,需要查看这些数据是如何被初始化的…
    假如父类对数据A进行了初始化,而子类对象没有执行父类的构造函数,则子类的数据A就未初始化
    .
  • 当父类中没有空参数构造函数,子类必须手动通过super()语句 来指定父类中的构造函数
  • 注:super() 语句this() 用法相同,需写在构造函数第一行,只能存在一个,要么存在super(),要么存在this()

简单代码展示----

class fu {
    int age;
    String name;

    fu() { 
       System.out.println("父类空参数构造函数");
    }

    fu(int age, String name) {
        this.age = age;
        this.name = name;
    }
}

class zi extends fu {
     zi() {
        //super();    子类构造函数第一行默认super()
    }

    zi(int age) {
        this();  //这时.super()不存在,但是引用了zi(){}间接访问了super()
    }

    zi(int age, String name) {
        super(age, name);  //可以手动指定父类中的构造函数
    }
}


继承简单总结代码演示

/*
 * 用学生,老师,来体现继承
 * 都有姓名年龄
 * 都需要学习安全知识,但是学生还要学习语数英,老师要学习授课知识
 */

class person {
    //提取共性数据
    int age;
    String name;

    //对象初始化就具备年龄,姓名
    person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public void study() {
        System.out.println("学习安全知识");
    }

    //改名功能
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    //改年龄功能
    public void setAge(String name) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

class students extends person {
    students(int age, String name) {
        super(age, name);    //super语句引用父类构造函数
    }

    //重写study方法
    public void study() {
        super.study();     //引用保留父类功能内容
        System.out.println("学习语数英知识"); //子类对象特有的功能内容
    }
}

class teacher extends person {
    teacher(int age, String name) {
        super(age, name);    //super语句引用父类构造函数
    }

    //重写study方法
    public void study() {
        super.study();     //引用保留父类功能内容
        System.out.println("学习授课知识");
    }

    //本类对象特有的功能
    public void meeting() {
        System.out.println("开会");
    }
}

public class DEMO {
    public static void main(String[] args) {
        students s1 = new students(12, "古天乐");
        s1.study();
        System.out.println("------------------");
        teacher t1 = new teacher(22, "周润发");
        t1.study();
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值