欢迎关注微博:@小白程序员的日常
欢迎关注微博超话:#小白程序员的日常#
本人目前在自学java,会不间断更新java知识
同为小白或者有大佬可以一起探讨一下
一.多态
1.什么是多态
同一个对象,在不同的时刻表现出不同的形态.
猫,狗也可以称之为是动物.
例:
猫 a = new 猫();
动物 b = new 猫();
2.多态的前提(必须同时拥有以下三种)
1.继承/实现关系
2.方法的重写
3.父类引用指向子类对象.
3.多态中成员访问的特点:
成员变量:编译看左边,运行看左边(父类)
成员方法:编译看左边,运行看右边
静态成员:编译看左边,运行看左边
例:
多态中成员方法的编译与运行
狸猫换太子:
类型 太子 = new 狸猫();
对外被叫做太子(属性,成员变量),外表显示也是太子(属性,成员变量),但是实际 上进行行为(成员方法)的是狸猫,所以会输出狸猫的行为.
4.多态的好处和弊端
好处:提高代码的扩展性
弊端:不能直接访问子类特有的功能
5.多态的转型
向上转型:就是多态
父类引用指向子类对象
向下转型: 还原成原有的数据类型(也可以是原有类型的父类类型).
格式:
子类类型 变量名称 = (子类类型)父类引用;
二.抽象类
1.描述
什么时候要将方法定义成抽象的方法:
当父类不知道子类该如何去实现该方法的时候,父类将他定义成抽象方法,由子类自身重写方法具体实现.
抽象方法有什么特点:
没有具体的实现方法体.只是声明定义了方法而已,并没有实现方法体.
注意:
如果一个类中,有抽象方法,那么该类必须是一个抽象类.
2.使用什么关键字定义抽象类和抽象方法
使用abstract关键字定义
3.抽象类的特点
1.抽象类和抽象方法都必须使用 abstract关键字来修饰
2.抽象方法所在的类,必须是一个抽象类
3.抽象类不能被实例化(不能被创建对象)
4.抽象类的子类要么重写父类中所有的抽象方法,要么子类本身也是一个抽象类.
5.抽象方法都是提供给子类使用的,自身没有什么实际作用.
注意:
抽象类中可以有构造方法.目的就是为了初始化成员变量.
4.抽象类中的成员
成员变量 --> 描述事物的属性的
成员方法 --> 描述事物的行为的
抽象方法 --> 给子类定义规则的
构造方法 --> 初始化本类的成员变量的
三.接口
1.什么是接口
接口就是一种公共的规范标准,只要符合规范标准,都可以使用
java中的接口更多的体现在对行为的抽象
2.接口的特点:
定义一个接口: 格式
public interface 接口名{}
类与接口的关系 --> 实现
public class A implements 接口{}
接口不能直接实例化
子类要么重写接口中所有的抽象方法,要么该实现类是一个抽象类
3.接口中的成员
1.常量
[public][static][final] 数据类型 变量名称 = 值; //其中中括号中的字是可以不用写的
2.抽象方法
[public][abstract] 返回值类型 方法名称(参数列表); //其中中括号中的字是可以不用写的
注意:
在接口中是没有构造方法的(一定要写构造方法会指向祖宗类).
Object是所有类的父类(祖宗),所有的类都直接或者间接的基础了Obejct类
4.类,接口的关系
类与类之间的关系:继承关系,而且是单继承,可以多层继承
类与接口之间的关系:实现关系, 一个类可以同时实现多个接口
接口与接口之间的关系: 继承关系,而且是多继承
5.抽象类和接口的区别
抽象类:
在描述的过程中,有可能出现的一些行为不能具体的进行描述,可以将该行为变 成抽象的描述(不具体描述功能的实现).像这种不能直接具体描述行为的实现 的类我们称之为 --> 抽象类.
作用:一般都是作为父类,提取的都是所有子类所共有的.
接口:
作用:指定规则,规范,提供标准的. 这些都是通过行为来进行表现的.
主要就是用来描述行为的.不是给某一类事物进行描述的,谁适合使用就是给谁用的.
语法(使用上)的区别:
抽象类中可含有:
成员变量,成员方法,构造方法,静态变量,静态方法,抽象方法
接口中可含有:
常量,抽象方法
相同点:
都可以有抽象方法,都可以有常量. 都不能直接实例化
总结:
接口的出现就是为了弥补类的单一继承性.