知识点

多态:一个事物在不同时刻体现出来的不同状态:
*
* 水:固态,汽态 ,液态
* Animal a = new Cat() ;
*
*对于多态的三个前提条件
*
* 1)条件1:必须有继承关系(如果没有继承关系,谈不上多态!)
* 2)条件2:必须有方法重写
* 子类出现了父类一样的 方法声明
* 3)有父类引用指向子类对象:向上转型
* Fu f = new Zi() ;
* 多态的三个条缺一不可!
*
*
*
*多态的成员访问特点:
* 成员变量:
* 编译看左边,运行看左边
* 成员方法(非静态的成员方法):
* 编译看左,运行看右;由于存在方法重写,所以就运行最终的就是子类的成员方法
* 静态成员方法:(静态方法算不上方法重写,静态方法叫隐藏,静态直接跟类有关系!)
* 编译看左,运行看左
* 构造方法:还是对象进行初始化,由于是一种继承关系,还是分层初始化!
*

多态的好处(特点):

*
* 1)提高代码的维护性(由继承保证)
* 2)提高代码的扩展性(由多态保证)
*
* java的开发原则:低耦合,高内聚

多态的弊端是不能访问子类的特有功能:如何解决?
* 异常:OOM异常:严重:OutOfMemory:内存溢出!
*
* 解决方案:
* 1)创建子类的具体对象,来访问自己的特有功能;虽然可以解决多态的弊端,但是从内存角度考虑,需要创建子类对象,那么必须在堆内存开辟空间,
* 耗费内存,浪费空间!
* 2)既然多态的第三个前提条件:父类引用指向子类对象,那么可不可以将子类的引用指向父类对象呢?
* 可以的:向下转型:将父类的引用强制转换为子类的引用:前提必须有父类的引用存在;
* 向下转型必须依赖于向上转型!
*
* */

接口的概念:
* 接口体现的是一种:扩展功能: 比如:猫可以跳高(并不是所有的猫都具有跳高功能)
*
* 如何表示接口:
* interface:接口 interface 接口名{
*
* }
* 接口里面的方法可以是非抽象方法吗?
* 不可以,只能是抽象方法
* 接口中不能有构造方法
*
* 接口的特点:不能实例化(不能直接创建对象)
* 接口如何实例化:
* 接口的子实现类:
* 1)接口的子实现类是抽象类,没有意义,子类都不能创建对象了;实际开发中用的就是子类的对象进行初始化!
* 2)接口的子实现类是非抽象类
* 接口的实例化:就是通过子实现类对数据进行初始化!
*
* 接口的子实现类和接口的关系:implements:
* 格式:
* class 子实现类名 implments(实现) 接口名{
*
* }

接口成员的特点:
* 成员变量:
* 只能是常量:存下默认修饰符:public static final (永远建议自己给出默认修饰符)
* 构造方法:
* 接口是没有构造方法的
* 成员方法:
* 接口中的成员方法默认修饰符:public abstract(永远建议自己给出默认修饰符)
*
* 类,抽象类,接口
*
*

类与类的关系:
* 继承关系:extends,java中只支持单继承,不支持多继承,但是可以多层继承!
* 类与接口的关系
* 实现关系:implements,并且,一个类在继承另一个类的同时,可以实现多个接口
* (class 子实现类名 enxtends Object implements 接口名1,接口名2…)
*
* 接口与接口的关系
* 继承关系:extends,可以支持单继承,也可以多继承!
*

面试题:
接口和抽象类的区别?

    1)成员的区别:
        成员变量:
            抽象类:成员变量可以是常量,也可以是变量
            接口:成员变量只能是一常量:存在默认修饰符:public static final
        构造方法:
            抽象类:可以有无参构造,有参构造方法
                  作用:通过子类进行数据初始化(通过子类创建对象)
            接口:没有构造方法的
        成员方法的区别:
            抽象类:可以有抽象方法,也可以有非抽象方法
            接口:只能是抽象方法:存在默认修饰符:public abstract

    2)关系的区别:
        类与类的关系:
            继承关系:extends,java中只支持单继承,不支持多继承,但是可以多层继承!
            类与接口的关系:
                实现关系:implements,并且,一个类在继承另一个类的同时,可以实现多个接口
                (class 子实现类名  enxtends Object implements 接口名1,接口名2...)

            接口与接口的关系
                    继承关系:extends,可以支持单继承,也可以多继承!

    3)设计理念的区别:
            抽象类:
                体现的是一种"is a"的关系,存在继承关系!(抽象类多态)
            接口:
                体现的是一种"like a"的关系,由于接口的一种扩展功能   

内部类的分类:
* 成员内部类:在外部类的成员位置
* 局部内部类:在外部了的局部位置定义的这个类

成员内部类
* 在测试类中需要访问成员内部类中的成员的方法:
*
* 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
* */

成员内部类的修饰符:
* private :为了保证数的安全性
* static修饰:为了方便调用
* 如果成员内部类被static修饰,那么要访问外部类的成员变量,这个变量必须被static修饰
*
* 静态的成员内部类访问该类中的成员方法:
格式:外部类名.内部类名 对象名 = new 外部类名.内部类名() ;

局部内部类:
* 定义在外部类的局部位置
*
* 结论:
* 无论是局部内部类还是成员内部类(非静态的)都可以直接访问外部类的成员,包括私有
*
* 面试题:
* 局部内部类访问局部变量会出现问题?
* 当前局部变量报错,必须用final修饰;为什么用final修饰?
* 是由于局部变量是随着方法调用而生成的,随着方法的调用完毕消失,而现在局部位置有一个局部内部类它要在自己的成员方法位置访问当前的局部变量
* 必须把变量变成一个常量,(需要用final:自定义常量),这样的一个变量的值永远是固定的!
*

匿名内部类
* 是内部类的简化版格式
* 前提条件:
* 必须存在一个接口或者是一个类(可以是具体类,也可以是一个抽象类)
*
* 书写的格式:
* new 接口名或者类名(){
* 方法重写;
* }
*
*
* 匿名内部类的实质:
* 继承了该类(抽象类)或者是实现了该接口的子类对象!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值