首页 > 其他分享 >面向对象--三大特征--多态

面向对象--三大特征--多态

时间:2024-04-05 19:29:42浏览次数:11  
标签:name -- 子类 age 多态 Student 父类 public 三大

1.什么是多台:同种类型,表现不同形态.

2.多态的表现形式:父类类型 对象名称 = 子类对象.

3.多态的前提:

a.有继承/实现关系;

b.有父类引用指向子类对象; 例如:Fu  f = new Zi();

c.有方法重写.

4,多态的好处:

使用父类作为参数,可以接受所有子类对象,体现多态的扩展性和便利.

public class Text {
    public static void main(String[] args){
        Student s= new Student("zhangsan" , 18 );
        way(s);
        Teacher t = new Teacher("lisi" , 19);
        way(t);
    }
    //这个方法既能接受老师的信息,又能接受学生的信息
    public static void way(Person p){
        p.show();
    }
}
class Person{
    private String name;
    private int age;
    public Person(){};
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public void setName(int age){
        this.age = age;
    }
    public int getAge(){
        return age;
    }
    public void show(){
        System.out.println("信息为" + name + "," + age);
    }

}
class Student extends Person{
    public Student(){};
    public Student(String name,int age){
        super(name, age);
    }
    public void show(){
        System.out.println("学生的信息为:"  + getName() + "," + getAge());
    }
}
class Teacher extends Person{
    public Teacher(){};
    public Teacher(String name,int age){
        super(name,age);
    }
    public void show(){
        System.out.println("老师的信息为:" + "," + getName() + "," + getAge());
    }
}

5,多态调用成员的特点:

a.成员变量调用:编译看左边,运行也看左边;

Person p = new Student();
System.out.println(p.name);

编译看左边:Javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败;

运行也看左边:Java运行代码的时候,实际获取的就是左边父类中成员变量的值(理解:在子类的对象中,会把父类的成员变量继承下来,如果是子类类型就用子类的name,如果是父类类型的就用父类的name,如果子类中没有变量name就会用父类的);

b.成员方法调用:编译看左边,运行看右边.

Person p = new Student();
p.show();

编译看左边:Javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败;

运行看右边:Java运行代码的时候,实际上运行的是子类中的方法(理解:子类对方法进行了重写,虚方法表中父类的方法会被覆盖);

6.多态的优势:

a.在多态形态下,右边对象可以实现解耦合,便于维护和扩展;

Person p = new Student();//只需要修改new Student()
p.work();//业务逻辑发生改变时,后续代码无需修改

b.定义方法的时候,使用父类类型作为参数,可以接收所有子类对象,体现多态的扩展性和便利;

7.多态的弊端:

a.不能调用子类的特有功能

解决方法:强制类型转换为子类类型

细节:转换的时候不能乱转,如果转换成其他类的类型,就会报错

Person p = new Student();
Student s = (Student)p;//变回原来的Student类型
Teacher t = (Teacher)p;//乱转为其他类型,系统会报错

做一个判断来确定转换的类型:if(变量名 instanceof 类名){..}

if(p instanceof Student){
            Student s = (Student) p;
            ...
        }

新特性:if(变量名 instanceof 类名 新的类名){...}

if(a instanceof Student s){...}

 8.引用数据类型的类型转换的方式:

a,自动类型转换

b.强制类型转换

Person p = new Student();//自动类型转换
Student s = (Student)p;//强制类型转换

标签:name,--,子类,age,多态,Student,父类,public,三大
From: https://blog.csdn.net/m0_73545557/article/details/137403955

相关文章

  • Bean初始化
    Bean初始化我们很多时候在Bean初始化之后会去做一些操作,如:数据初始化,缓存预热等初始化操作。Spring提供了三种方式!实现InitializingBean接口,重写afterPropertiesSet方法。使用@PostConstruct指定Bean的initMethod方法执行顺序@PostConstruct->InitializingBean(afte......
  • 使用阿里云试用Elasticsearch学习:1.1 基础入门——入门实践
    阿里云试用一个月:https://help.aliyun.com/search/?k=elastic&scene=all&page=1官网试用十五天:https://www.elastic.co/cn/cloud/cloud-trial-overviewElasticsearch中文文档:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_document_oriented.html控制台......
  • 写文章 点击打开程序员子龙的主页 java全套电子书分享(可直接下载)
    books经典的编程书单大全简介:这里汇集如下主题的经典书籍:编程语言、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件、前端开发、后台开发、网络编程、Linux使用及内核、求职面试、算法与数据结构、数据库、Redis、消息中间件等编程学习书籍。......
  • SQL 递归核心思想(递归思维)
    目前很缺递归思维,主要是算法代码写得少,本篇记录下最近思考的内容。以PostgreSQL代码举例(主要是非常喜欢这款性能小钢炮数据库)。树状查询不多说,很简单大家基本都会,主要讲cte代码递归实现不同需求。以下所有内容都是我个人理解,不对之处请各位读者多指教!cte语法简介以PG举......
  • 001_Numpy数组
    1.手动构造数组importnumpyasnpimportseabornassnsimportmatplotlib.pyplotaspltimportmathfrommatplotlibimportcmdefvisualize_2D(array,vmax,vmin):fig_width=math.ceil(array.shape[1]*0.5)fig_length=math.ceil(array.shape[0]......
  • 使用bundler自动化构建Xcode项目时遇到的问题。
    报错信息:Multiplecommandsproduce'/Users/wjw/Library/Developer/Xcode/DerivedData/Moments-dgddojujkmrazagmddjvfywoqzwo/Build/Products/Debug-iphonesimulator/Moments.app/Info.plist':Target'Moments'(project'Moments')hascopy......
  • 【攻防技术技术】-- js+base64
    全文用时:10min在JavaScript中,btoa和atob是两个用于Base64编码和解码的函数。下面是对这两个函数以及Base64的解释和代码示例:btoa函数:btoa(表示base64encode)将字符串转换为Base64编码的数据。它接受一个ASCII字符串参数,并返回经过Base64编码的字符串。b表示"b......
  • POI之EXCEL导出封装(未测试)
    基础类描述ExcelWriter(导出工具类)Query(通用查询)Consumer(函数参数)SpringBeanUtil(获取bean)代码ExcelWriterimportcn.hutool.core.collection.CollUtil;importcn.hutool.core.collection.ListUtil;importcn.hutool.core.util.PageUtil;importcn.hutool.json.JSONObj......
  • 【安全技术系列】白盒测试方法+demo演示
    首先,说一下什么是单元测试。单元测试是一种软件测试类型,其中测试用例针对单个代码单元(例如函数、类或模块)进行设计和执行。单元测试旨在验证代码单元的正确性、隔离性和健壮性。什么是白盒测试:白盒测试是一种软件测试技术,其中测试人员具有对被测代码的内部结构和实现细节的完全......
  • 模拟赛总结
    23-24term19.17最可惜的是t4:把b放在a后面就形成了一个长为2*m的LIS。我想到了LIS但是一直觉得无法保证长度为m所以直接hack掉自己的想法。。(虽然LIS时间复杂度10^7理论是可以过的。)太可惜了。当然也可以搜索剪枝(你是傻子你不会dfs你别想了)T2:转移方程脑子炸了想了好久,然后还没......