文档章节

Day08多态,abstract,接口

L
 Lao鹰
发布于 01/28 15:34
字数 1394
阅读 105
收藏 0

1.A:多态的概述:事物存在的多种形态。

   B:多态前提:要有继承关系,方法重写和父类引用子类对象。

                            父类引用子类对象:Animal a = new Cat();

                                                             a.eat();    //效果等同于c.eat();

2.多态中的成员访问特点

  A.成员变量:编译看左边(父类),运行看左边(父类)。

  B.成员方法:   编译看左边(父类),运行看右边(子类)。也叫做动态绑定。

  C.静态方法:    编译看左边(父类),运行看左边(父类)。

  总结:(静态和类相关,算不上重写,所以,访问还是左边的)

  只有非静态的成员方法,编译看左边,运行看右边。

3.多态的向上转型和向下转型

Person p = new SuperMan();//父类引用指向子类对象就是向上转型

父类创建的对象不能直接调用子类的属性和方法,如果想调用子类方法必须得执行向下转型操作。

Superman sm = (Superman)p;//向下转型。

4.多态的好处和弊端

A:多态的好处

        a:提高了代码的维护性(继承保证)

        b:提高了代码的扩展性(由多态保证)

B:多态的好处

        可以当作形式参数,可以接受任意子类对象

    //注意:Animal a = new Cat();开发中很少再创建对象的时候用父类引用指向子类对象,反而直接创建子类对象

    public static void main(String[] args){    //当作参数的时候用多态最好,因为扩展性强。

                method(new Cat());

                method(new Dog());//想这样使用的前提是,Dog类和Cat类中都必须含有eat()方法。

}

public static void method(Animal a){

               a.eat();

}

C:多态的弊端

5.抽象类

A.概述:就是看不懂的。

B.特点

    *a:抽象类和抽象方法必须用abstract关键字修饰

        *abstract calss 类名 { }

        *public abstract avoid eat();注意二点,1.没有{}。2.当不知道如何实现该方法时,用抽象类方法这样写着先。

    *b:抽象类不一定有抽象方法,有抽象方法的类一定是抽象类或者是接口

    *c:抽象类不能实例化(创建对象)那么,抽象类如何实例化呢?

        *按照多态的方式,由具体的子类实例化(父类引用指向子类对象)。其实这也是多态的一种,抽象类多态。

    *d:抽象类的子类

        *要么是抽象类

        *要么重写抽象类中的所有抽象方法

6.A.抽象类的成员特点(回忆案例 葵花宝典来记忆)

    a.成员变量:既可以是变量,也可以是常量。abstract是不能修饰成员变量。

    b.构造方法:有。如果子类有构造方法,那么父类中也必须写出抽象类构造方法。

        *用于子类访问父类的初始化

 B:抽象类的成员方法特性:

  a:抽象方法 强制要求子类做的事情。(可以这样理解,父类的构造方法没有内容,强制子类写出有内容的构造方法)

    b:非抽象方法 子类继承的事情,提高代码复用性。

 

7.接口(一个类不写出继承哪个类,系统会默认指定该类继承object类)

A.概述

    *从狭义的角度讲就是指java中的interface

    *从广义的角度将对外提供规则的都是接口

B.接口特点

    *a:接口用关键字interface表示

            *interface 接口名 { }  //接口中的方法必须是抽象的

    *b:类实现接口用implements表示

            *class 类名 implements 接口名 { }

    *c:接口不能实例化

            *那么,接口如何实例化呢?

                按照多态的方式来实例化。(也就是父类引用指向子类对象)

    *d:接口的子类

            *a:可以是抽象类。但是意义不大。

            *b:可以是具体类。要重写接口中的所有抽象方法。(推荐)

8.接口中的成员特点

A.成员变量:只能是常量,并且是静态的并公共的。

                *默认修饰符:public static final(系统会自动加上)

                *建议:自己手动给出

B.构造方法:接口没有构造方法。

C.成员方法:只能是抽象方法。

                *默认修饰符:public abstract

                *建议:自己手动给出

 

9. 抽象类和接口的区别

A.成员区别:

*抽象类:

*成员变量:可以变量,也可以常量

*构造方法:有

*成员方法:可以抽象,也可以非抽象

*接口:

*成员变量:只可以常量

*构造方法:无

*成员方法:只可以抽象

 

B.类与类,类与接口,接口与接口的关系

    a.类与类:继承关系,只能单继承,可以多层继承。

    b.接口与接口:继承关系,可以单继承,可以多继承。

    c.类与接口:*实现关系,可以但实现,也可以多实现。

                        *并且还可以在继承一个类的同时实现多个接口。

C.设计理念区别

*抽象类 被继承体现的是:“is  a”的关系。抽象类中定义的是该继承体系的共性功能。

*接口 被实现体现的是:“like a”的关系。接口中定义的是该

 

    

 

 

 

  

 

© 著作权归作者所有

L
粉丝 0
博文 28
码字总数 19127
作品 0
东莞
私信 提问
加载中

评论(0)

如何实现Java的多态

8.2 实现多态 总结以上例子,在代码中实现多态必须遵循的要求可归纳如下: 1. 代码中必须有超类和子类继承关系。 2. 超类提供作为接口的方法,对子类完善或者覆盖这些方法指定规范。 3. 参与...

高永强
2009/07/13
0
0
java学习计划

源于传智播客毕向东老师的教学计划: day01-01-基本常识 day01-02-Java的跨平台性 day01-03-Java环境搭建(安装) day01-04-Java环境搭建(环境变量配置) day01-05-Java环境搭建(环境变量配置技...

Bony
2016/05/14
74
0
(JAVA)一个类没有直接实现接口,为什么可以这样为父接口实例化呢?

@tcxu 你好,想跟你请教个问题: package jiu; interface A { // 定义一个接口 String INFO = "Hello World ."; void print(); // 抽象方法 } interface B { // 定义一个接口 public abstrac......

顺应天意了却凡尘
2019/02/11
582
2
Java基础进阶 第四天 抽象接口多态

今日任务: 1,能够独立使用抽象类 2,能够独立使用多态 3,能够独立使用接口 4,能够理解适配器设计模式 1. 抽象类 1.1. 抽象类的产生 需求:创建类描述猫和狗的行为; 猫的行为:抓老鼠;吃...

Villain丶Cc
2018/06/03
0
0
重新学.Net[八]——CLR的面向对象实现

懒了好几天,尽玩去了。恩,赶在年前,把想写的再写一点^_^。 .Net目的之一是建立一个面向对象的编程平台。CLR当然需要支持面向对象的各个特征,确切一些,CLR基本可以视为一个完全面向对象的...

余二五
2017/11/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL DROP所有表,忽略外键

是否有一个很好的简单方法从MySQL数据库中删除所有表,忽略可能存在的任何外键约束? #1楼 这是一个基于游标的解决方案。 有点冗长但作为单个SQL批处理: DROP PROCEDURE IF EXISTS `drop_a...

技术盛宴
18分钟前
64
0
03-ObjectArx-创建圆

1.由于两点创建圆用到根据两点计算圆心和半径,新建筛选器CwCalculation,并新建类CwCalculation CwCalculation.h #pragma onceclass CwCalculation{public:CwCalculation(void)...

caiweicaiwei
33分钟前
47
0
使用Kali linux生成木马入侵局域网安卓手机

1、首先查看本机ip,这里我本机IP地址为192.168.0.105 2、生成木马 msfvenom -p android/meterpreter/reverse_tcp LHOST=你kali的ip LPORT=5555 R > /root/apk.apk 输入上述命令生成木马,这...

回忆是如此忧伤
34分钟前
40
0
被关系数据库建表和升级折磨?因为你没用大道至简的Flyway

前言 六年前Flyway已经是我TDD开发、持续集成工具栈中的重要一环了,作为早期用户,我早就应该为它做个”广告“,可惜对创业者来说时间太宝贵了,现在趁着疫情才有机会在家里总结点东西。虽然...

chentao106
37分钟前
191
1
解决ClientDataSet连接脱离框架导致某些字段无法在客户端修改值的问题

{ function: 解决ClientDataSet连接脱离框架导致某些字段无法在客户端修改值的问题 description: 将一个复制Data的clientdataset做成可写。因为直接赋值cdsData.data=cdsTemp.data会连着dat...

乞丐88
38分钟前
47
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部