今天学习了引用数据类型的转换,抽象类,以及接口。
引用数据类型的转换
引用数据类型的转换和基本数据类型的转换一样,分为自动类型转换,以及强制类型转换。
一.向上转型
1.概念
父类引用指向子类对象,叫做向上转型,相当于基本数据类型中的自动类型转换。
2.定义方法
父类类型 变量名=子类对象
3.优点:
可以隐藏子类类型,提高程序的可扩展性,多态本身就是向上转型。
4.缺点:
只能使用父类和子类共有的内容,不能使用子类特有的内容。
二.向下转型
1.概念
子类引用指向父类对象,叫做向下转型,相当于纸杯数据类型中的强制类型转换。
2.定义方法
子类类型 变量名 =(子类类型)父类对象
3.优点:
除了能使用父类和子类共有的内容外,还可以子类特有的内容。
4.缺点:
容易抛出异常。(与基本数据类型中强制类型转换类似,存在丢失数据的风险。)
三.多态中成员变量的特点
无论是编译还是运行阶段,都是参考等号左边的类型。
四.多态中成员方法的特点
编译阶段,参考等号左边的类型,运行阶段参考等号右边的类型。
五.抽象类及抽象方法
1.概念
当编写一个类时,不知道该类中的某个方法何时或者是如何实现。用abstract修饰词修饰该类及方法后,可以不写这个方法,在子类中重写此方法即可。这个被abstract修饰的类就叫做抽象类。被abstract修饰的方法叫做抽象方法。
2.使用方法
定义类: abstract calss 类名{};
定义类中的方法:访问修饰符 abstract 返回值类型 方法名(形参列表);
3.抽象类的特点:
1.抽象类不能被实例化,也就是不能创建对象。因为抽象类里的方法只有声明,不能用对象调用方法。
2.抽象类可以定义成员变量及静态变量。
3.抽象类可以有构造方法,方便子类创建对象时给抽象类赋值。
4.抽象类中可以定义抽象方法,成员方法,或者不定义任何方法。
5.子类继承抽象类是一定要重写抽象类中的抽象方法,否则会报错。
4.抽象方法的特点
1.抽象方法只有声明,没有方法体,没有大括号,以;结尾。
2.继承抽象类的子类要么实现抽象方法,要么也是抽象类,否则会报错。
3.抽象方法必须写在抽象类中,抽象类中可以没有抽象方法。
5.注意事项
abstract关键字不能和 public final static关键字共存。
六.接口(interface)
1.概念
当抽象类中的方法全是抽象方法时,该抽象类可以用另一种方式来表示,该方式就叫做接口。
2.定义方法:
interface 接口名[extends 接口1,接口2,..,]{
方法
常量
。。。
}
注:[]中的可有可没有,根据实际情况写。
3.注意事项:
1.接口可以使用extends实现多继承。
2.接口不能被实例化。
3.接口中定义的属性,都属于全局静态常量,默认由public static final来修饰的。
4.接口中定义的方法,jdk1.8之前,全部默认为抽象方法,jdk1.8之后,除了抽象方法外,接口中还可以存在
静态方法和default修饰的成员方法。
5.接口中没有构造方法,因为接口没有需要初始化的成员变量,切不能被实例化。
4.接口的实现:
类与类之间是继承关系,类与接口之间是实现关系。
语法:
class 实现类[extends 父类] implements 接口{
重写接口中定义的抽象方法
}
小白学习中,为了养成每日总结的习惯,每天写一篇。有写的不对的地方欢迎大家指出。