2019-07-22

抽象类和抽象方法

抽象方法:

使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。

抽象方法的声明:

abstract 返回值 方法名();           

这个就是抽象方法,使用absract修饰,且没有方法体;

抽象类:

包含抽象方法的类就是抽象类。通过abstract方法定义规范,

抽象类的声明:

修饰符 abstract 类名{                   }

抽象类的用途:

要求子类必须定义具体实现方法。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。

代码演示:

这是一个抽象类,且含有抽象方法


这个是继承抽象类的实现类,如不对抽象方法进行重新,编译就会报错;

没有重写方法,编译不能通过。

对抽象方法进行重新后,编译器就能通过;


重写方法后,编译通过。


接口

为什么需要接口?接口和抽象类的区别?

接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离。

抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

区别:

      1. 普通类:具体实现

      2. 抽象类:具体实现,规范(抽象方法)

      3. 接口:规范!

接口的声明:

[访问修饰符]  interface 接口名   [extends  父接口1,父接口2…] 

{常量定义;  

抽象方法定义;}

代码演示:

一个接口是可以继承多个接口的


interfaceC继承了interfaceD和interfaceF

如果哪个类要实现接口interfaceC的话,就必须实现interfaceD和interfaceF中的方法。因为interfaceC继承了interfaceD和interfaceF


没有重写方法,不能通过。


重写方法后,编译就能通过了。

定义接口的详细说明:

      1. 访问修饰符:只能是public或默认。

      2. 接口名:和类名采用相同命名机制。

      3. extends:接口可以多继承。

      4. 常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。

      5. 方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。

要点

      1. 子类通过implements来实现接口中的规范。

      2. 接口不能创建实例,但是可用于声明引用变量类型。

      3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。

      4. JDK1.7之前,接口中只能包含静态常量、抽象方法,不能有普通属性、构造方法、普通方法。

      5. JDK1.8后,接口中包含普通的静态方法。

接口的多继承

一个类继承一个父类但可以继承多个接口,继承多个接口后,需要把每个接口的方法都重写;

代码演示

接口interfaceA中有一个方法show方法,虽然只写了public修饰,但是在接口中,默认会是public abstract修饰的。

实际等于是public abstract void show()

int A=1100;实际等于是 public static final int A=1100;


同理。接口interfaceB中有一个方法int方法,没有写任何参数,

但实际上等于public abstract void info()


FatherClass类,这是一个普通的类,没有什么特别的。

SubClass这个类是继承类FatherClass类,并且实现了 interfaceA和interfaceB,所以SubClass必须重写info和show方法,否则程序会报错。


没有重写,编译报错。
重新之后,编译通过。


内部类的概念

我们把一个类放在另一个类的内部定义,称为内部类(innerclasses)。

内部类可以使用public、default、protected 、private以及static修饰。而外部顶级类(我们以前接触的类)只能使用public和default修饰。

内部类的作用:

1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

 2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。

3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。

内部类的使用场合:

1. 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。

2.  使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些接口,对于内部类没有任何影响。

内部类的分类

非静态内部类(外部类里使用非静态内部类和平时使用其他类没什么不同)

非静态内部类可以直接访问外部类的成员,但是外部类不能直接访问非静态内部类成员。

非静态内部类不能有静态方法、静态属性和静态初始化块。

静态内部类

静态内部类看做外部类的一个静态成员。 因此,外部类的方法中可以通过:“静态内部类.名字”的方式访问静态内部类的静态成员,通过 new

静态内部类()访问静态内部类的实例。

匿名内部类的使用

适合那种只需要使用一次的类。比如:键盘监听操作等等。

String基础

1. String类又称作不可变字符序列。

2. String位于java.lang包中,Java程序默认导入java.lang包下的所有类。

3. Java字符串就是Unicode字符序列,例如字符串“Java”就是4个Unicode字符’J’、’a’、’v’、’a’组成的。

4.  Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。

String中常用的方法:


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 抽象类和抽象方法 抽象类:使用abstract修饰的类就是抽象类(抽象类就是一种规范,只能用来被子类调用) 1)抽...
    w王静阅读 409评论 0 0
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-java.h...
    eddy_wiki阅读 1,228评论 0 5
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,098评论 0 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,272评论 0 2
  • Advanced Language Features 知识点:一. static修饰符 static修饰符可以用来...
    风景凉阅读 463评论 0 0