自学内容网 自学内容网

DAY7 继承&多态

继承

 目的

提高代码的重用性,减少一些重复代码的书写

权限修饰符

就是是用来限制类中的成员(成员变量、成员方法、构造器)能够被访问的范围。

private 只能本类
缺省 本类、同一个包中的类
protected 本类,同一个包中的类、子孙类中
public 任意位置

特点

单继承:Java是单继承模式:一个类只能继承一个直接父类

多层继承:Java不支持多继承,但支持多层继承
祖宗类:Java中所有的类都是object类的子类

就近原则:优先访问自己类中,自己类中的没有才会访问父类,当子类要访问相同的父类的内容则需要用super关键字

方法重写

当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类的这个方法,这就是方法重写。

注意事项

  • @Override增加注解
  • 子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限(public > protected >缺省)
  • 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
  • 私有方法、静态方法不能被重写,如果重写会报错的。

 常见场景

子类重写Object类的toString()方法,以便返回对象的内容。

子类构造器的特点

子类的全部构造器,都会先调用父类的构造器,再执行自己。

简单举个例子

首先创建一个People类,定义姓名,性别,还有有参,无参构造器,以及getter和setter方法

package com.test.exten;

public class People {
    private  String name;
    private  char sex;

    public People(String name, char sex) {
        this.name = name;
        this.sex = sex;
    }

    public People() {
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", sex=" + sex +
                '}';
    }

    public String getName() {
        return name;
    }

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

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}

创建一个People类,定义技能,有参和无参构造器。

package com.test.exten;

public class Teacher extends People {
    private String skill;

//    public Teacher(String name, char sex, String skill) {
//        super(name, sex);
//        this.skill = skill;
//    }

    public Teacher(String skill) {
        this.skill = skill;
    }

    public String getSkill() {
        return skill;
    }

    public Teacher() {
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

}

创建测试类Test

package com.test.exten;

public class Test {
    public static void main(String[] args) {
        Teacher t = new Teacher();
        t.setSkill("唱歌");
        t.setName("bob");
        t.setSex('男');
        System.out.println(t.getSkill());
        System.out.println(t.getSex());
        System.out.println(t.getName());
    }
}

结果 

但是这样创建就会报错

在People中创建有参构造器如下就可以实现这个需求

   public Teacher(String name,String skill,char sex) {
        super(name, sex);
        this.skill = skill;
    }

THIS调用兄弟构造器

作用:在构造器中调用本类的其他构造器。

super(...)this(...)必须写在构造器的第一行,而且两者不能同时出现。

多态

概念

多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态。

对象多态:人这个对象可能是学生、老师等

行为多态:老师教书,歌手唱歌等

案例:动物有狼和乌龟(对象多态),但是狼跑的快、乌龟跑的慢(行为多态)

前提

有继承/实现关系;存在父类引用子类对象;存在方法重写。

作用

在多态形式下,右边对象是解耦合的,更便于扩展和维护。

定义方法时,使用父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
多态下不能调用子类独有功能

多态下的类型转换问题 

注意

需要idea开启注解功能


原文地址:https://blog.csdn.net/kksunkanghui/article/details/142823886

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!