继承
class A extends B{...}
在A的默认构造方法中第一行会默认调用父类B的构造方法super();
this代表本类引用,this.属性,this.方法(),还可以this()放在构造第一行表示调用构造
super与this用法一致,但代表父类的引用,即调用父类的属性方法
子类覆盖父类的方法时要求格式一模一样,权限不低于父类方法
被覆盖掉的属性或方法只是被隐藏了,可以通过super关键字访问
抽象
abstract class Student{abstract void studey();}
抽象类不能被new实例化,因为调用抽象类的抽象方法没有意义
抽象类就是拿来被继承的,子类要复写所有的抽象方法,除非子类也是抽象类
特殊:定义抽象类而不定义抽象方法,只为不让该类实例化
案例————查看一段代码的执行时间
1 /**
2 *需求:查看一段程序的执行时间
3 *原理:程序结束时间-程序开始时间
4 *方法:public static long currentTimeMillis()
5 *定义一个抽象的GetTime类,定义一个抽象的方法runCode以便执行任意代码
6 */
7 abstract class GetTime
8 {
9 //定义成final,只为不让子类重写,因为这个方法就是专门用来获取执行时间的
10 public final void getTime(){
11
12 long start=System.currentTimeMillis();
13 //runCode,把要执行的代码抽象成一个方法,只声明
14 runCode();
15
16 long end=System.currentTimeMillis();
17 System.out.println("Time:"+(end-start));
18 }
19 //复写抽象方法runCode()的时候才确定执行的具体代码
20 public abstract void runCode();
21
22 }
23 /**
24 *继承GetTime类,并复写runCode()
25 */
26 class AbstractGetTime extends GetTime
27 {
28 public void runCode(){
29 for(int i=0;i<1000;i++)
30 System.out.print(i);
31 }
32 }
33 class AbstractExample
34 {
35 public static void main(String[] args)
36 {
37 //GetTime gt=new GetTime();
38 AbstractGetTime gt=new AbstractGetTime();
39 gt.getTime();
40 }
41 }
接口
interface 接口名{}
class A extends 父类 implements 接口名1,接口名2{...}
属性:为公用静态常量 固定 public static final int x=3;
方法:为公用抽象方法 固定 public abstract 返回值类型 方法名();
特点:
1.在接口中,常量可以省略前缀public static final,方法可以省略public abstract
2.普通类实现接口时,一定要复写接口中所有的方法,且前缀修饰为public
3.interface 接口名{}编译之后会生成 接口名.class的文件
4.接口与接口的关系:继承,接口可以多继承 interface A extends B,C{}
5.设计接口的方法时,不能让两个方法名和参数相同而返回值类型不同的方法,防止多实现时报错!!