继承

继承

  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.设计接口的方法时,不能让两个方法名和参数相同而返回值类型不同的方法,防止多实现时报错!!

原文地址:https://www.cnblogs.com/erhai/p/4686716.html