最近在练车,so没来得及更新,有兴趣的是CSDN副总裁觉得我文章格式不太好,因此我换个文本编辑器。
抽象类和接口
在Java中,类的继承是指在一个现有类(父类)的基础上去构建一个新的类(子类),子类会自动拥有父类所有可继承的属性和方法。
定义Dog类继承Animal类:
class Dog extends Animal{
//代码块
}
注意问题:
- 一个子类只能有一个父类
- 多个子类可以共有一个父类
- 多层继承是可以的
- 子类和父类是一种相对概念,一个人是子类的同时也可是另一个类的子类。
- 在对父类方法重写时子类重写方法要和父类被重写方法有相同的方法名、参数列表、返回值类型。
- 子类重写父类方法时,不能使用比父类中被重写的方法更严格的访问权限,例:父类中方法是public的,子类的方法就不能是 private 的。
super 关键字可用于访问父类成员
用 super 关键字访问父类的成员变量、成员方法。
super.成员变量
super.成员方法([参数1,参数2......])
使用 super 关键字访问父类的构造方法
super([参数1,参数2......])
通过 super 调用父类构造方法的代码必须位于子类构造方法第一行且只出现一次
在定义一个类时,若无特殊需求尽量在类中定义一个无参构造方法,避免被继承时出错。
final 关键字可修饰:
- 类:不能被继承
- 方法:不能被子类重写
- 变量:是只能赋值一次的变量
例如:
final int num = 2;/*第一次可以赋值*/
num = 4;//再次赋值会报错
final 关键字修饰成员变量时,虚拟机不会对其进行初始化,因此在使用 final 修饰成员变量时,要在定义变量的同时赋予一个初始值!
抽象类和接口
不包含方法体的方法为抽象方法
abstract void shout(); //定义抽象方法shout()
定义抽象类Animal
abstract class Animal{
//定义抽象方法 shout();
abstract int shout();
}
包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只要用 abstract 关键字修饰即可
抽象类不可被实例化
接口:
- 抽象方法
- 常量
关键字:interface
格式:
[public] interface 接口名[extends 接口1,接口2...]{
[public] [static] [final] 数据类型 常量名 = 常量值;
[public] [abstract] 返回值 抽象方法名(参数列表);
}
接口中的变量默认为全局变量
接口中的方法默认为抽象方法
接口的实现类声明格式:
[<修饰符>] class <类名> [extends <超类名>][implements <接口1>,<接口2>,...]
一个类实现一个接口,必须给出接口中的所有方法的实现,如果不能实现某方法,也必须写出一个空方法。
接口的特点:
- 接口中的所有方法都是抽象的,不能实例化对象
- 接口中的属性只能是常量
- 当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需实现接口中的所有方法
- 一个类通过 implements 关键字实现接口时,可实现多个接口,被实现的多个接口间要用逗号隔开,具体示例如下:
interface Run{……}
interface Fly{……}
class Bird implements Run,Fly{}
一个接口可通过 extends 关键字继承多个接口,接口间用逗号隔开
interface Running{……}
interface Flying{……}
Interface Eating extends Running,Flying{……}
一个类在继承另一个类同时还可以实现接口,此时, extends 关键字须位于 implements 关键字之前,具体示例:
class Dog extends Canidae implements Animal{
//先继承,在实现
//程序代码
}
这几天的 java 学习就差不多是这把,因为练车累得很。。。加油!
其作始也简,其将毕也毕巨!
大创的机械结构也得开始了!SW我来了!!