首页 > 其他分享 >DAY7 继承&多态

DAY7 继承&多态

时间:2024-10-13 19:18:40浏览次数:10  
标签:name 继承 DAY7 多态 sex skill public String

继承

 目的

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

权限修饰符

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

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开启注解功能

标签:name,继承,DAY7,多态,sex,skill,public,String
From: https://blog.csdn.net/kksunkanghui/article/details/142823886

相关文章

  • 第五章 子类与继承
    第五章子类与继承5.1子类与父类5.1.1子类5.1.2类的树形结构5.2子类的继承性5.2.1子类和父类在同一包中的继承性5.2.2子类与父类不在同一包中的继承性5.2.3继承关系的UML图5.2.4protected的进一步说明(关于子类对象的调用问题)5.3子类与对象5.3.1子类对象的特点......
  • 一个月学会Java 第11天 面向对象——多态
    Day11面向对象——多态我们来复习一下面向对象的三大特性分别是什么,面向对象拥有的三大特性分别为继承、封装、多态。继承我们也已经学过了,就是父类和子类、封装其实也学过了其实就是访问修饰符和包,主要的作用为更好的封装我们接下来要讲的多态则是面向对象的最难点,他......
  • C/C++语言基础--C++神奇的多态
    本专栏目的更新C/C++的基础语法,包括C++的一些新特性前言通过前面几节课,我们学习了抽象、封装、继承相关的概念,接下来我们将讲解多态,多态他非常神奇,正式有了他,类才能出现多样性特征;C语言后面也会继续更新知识点,如内联汇编;欢迎收藏+关注,本人将会持续更新。文章目录......
  • tour cpp: std::variant 实现无继承层次的访问者模式
    std::variant是基于模板而实现的一种包括了一个标志位的高级union对象;可以完全替代如下场景:structst{inttype;unionun{inti;floatf;};};#include<iostream>#include<variant>template<class...base>structoverloaded:bas......
  • C++(继承)
    1.继承1.1基础使用继承就是在一个已经存在的类的基础上新建立一个类,新创建的类拥有之前类的特性。继承是面向对象的三大特性之一,体现了代码复用的思想。已经存在的类被称为“基类BaseClass”或“父类”新创建的类被称为“派生类”或“子类SubClass”下面是一个最简......
  • 继承--C++
    文章目录一、继承的概念及定义1、继承的概念二、继承定义1、定义格式2、继承基类成员访问方式的变化3、继承类模板三、基类和派生类间的转换1、继承中的作用域2、隐藏规则:四、派生类的默认成员函数1、4个常见默认成员函数2、实现⼀个不能被继承的类五、继承与友元六......
  • 面向对象进阶-认识多态
    2024-10-10,今天的课程比较多,改了很多线下的事情,今天先对多态进行了认识。什么是多态?同类型的对象,表现出的不同形态。多态的表现形式?父类类型对象的名称=new子类对象();fuf=newzi();多态的前提?1.有继承关系 2.有父类引用指向子类对象 3.有方法重写多态的好......
  • 08 JAVA 继承多态抽象类接口
    1函数题1,super.a来明确访问父类的字段。super(a);表示调用父类的构造函数,并传递参数a2,抽象类继承需要写新的构造器,重写抽象方法classCircleextendsshape{privatedoubleradius;publicCircle(doubleradius){this.radius=radius;}//构......
  • 【python实操】python小程序之继承
    引言python小程序之继承文章目录引言一、继承1.1概念1.1.1基本语法1.1.2关键点解释1.1.3示例1.1.4总结1.2题目1.3代码1.4代码解释1.4.1类定义1.4.2对象创建与方法调用1.4.3总结二、思考一、继承1.1概念python中的继承是一种强大的机制,它允许一......
  • PTA 作业三 继承与多态 JAVA 6-1 从抽象类shape类扩展出一个圆形类Circle 面向对象程
    6-1从抽象类shape类扩展出一个圆形类Circle分数25作者 张德慧单位 西安邮电大学请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。publicabstractclassshape{//抽象类publicabstractdoubleg......