现在的位置: 首页 > 综合 > 正文

java之抽象类和接口理解

2018年05月09日 ⁄ 综合 ⁄ 共 1622字 ⁄ 字号 评论关闭

今天下午看了郝斌的java视频,终于对抽象类和接口有了理解。

抽象类的由来:利用抽象类是为了更好的对类加以分类,就如同人类不但给各种具体的植物去了名字还发明了“植物”这个抽象的词对所有的具体植物进行分类一样。

抽象类通常用来作为一个类族的最顶层,用最底层的类表示现实中的具体事物,用最顶层的类表示该类族的事物的共性。

抽象方法:没有方法体的方法。

class A{
    abstract public void f();//抽象方法前面必须有abstract,后面必须以分号结尾。
}

**有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法,所以上面的类前必须加abstract。

abstract class A{
      abstract public void f();
}
某一个类继承抽象类可以是抽象类,也可以不是。如果不是,则必须重写方法,加上具体的方法体。

关于抽象类的使用:

abstract class A{
	abstract public void f();
}
class B extends A{
	public void f(){
		System.out.println("BBB");
	}
}
public class Test{
	public void main(String[] args){
		//A aa = new A();//错误 第11行
		B bb = new B();
		bb.f();
		
		A aa;//正确。可以定义一个抽象类的引用,但不可以定义一个抽象类的对象,所以第11行错误,而这行正确。
		aa = bb;
		aa.f();//这里利用了多态的知识点。
	}
}

final关键字:可以修饰类,类中的属性,类中的方法。

修饰类则是最终子类,不能再被继承;修饰属性则常量不能被修改;修饰方法则可以被子类继承,但不能被子类重写。

final修饰属性:该属性必须被赋值且只能被赋值一次。(引申:全局变量(成员变量)初始化没有被赋值,则是默认值0;局部变量初始化没被赋值则是垃圾值,如果被使用,则会报错。)属性被初始化有两种方式:1.在定义成员变量的同时初始化;2.在类中所有的构造函数中初始化。

接口的定义:就是抽象方法和常量值的集合。从本质上来说是一种特殊的抽象类。

格式:[public]interface interfaceName [extends SuperInterfaceList(可以继承多个接口)]

{

常量定义和方法定义;

}

关于接口的一些语法:

1.接口中定义的属性必须是public static final的,而接口中定义的方法则必须是public abstract的,因此这些修饰符可以部分或全部省略。

2.接口中定义的属性的值在实现类中不能被更改,因为是final的。

3.一个类只能实现某个接口(implements),而不能继承某个接口。

4.接口可以继承接口,还能继承多个接口。

5.如果一个类只实现了一个接口的部分方法,则该类必须声明为抽象类,因为该类中还存在抽象方法。

6.一个类可以继承一个父类的同时实现一个或多个接口,但extends在前。(一个类想要实现接口中的方法时,必须得在方法前加上public,因为重写方法,要同名同参同返回值,同时作用范围不能缩小,接口中的方法都是public修饰的,所以重写的方法也必须用public修饰。)

7.不可以new接口对象,但可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的(详见抽象类相关知识)

接口的作用:

1.通过接口可以实现不相关类的相同行为。如:java规定所有可以完成自我复制功能的类都必须得实现java.lang.Colneable接口,但该接口确实空的,该接口中没有任何内容,目的只是为了起个标志作用
2.接口提供了不同对象进行协作的平台。如事件处理。

3.接口弥补了类只能单继承的缺点。

4.接口使我们了解一个类功能的重要途径。如:java整个容器框架就是以接口的方式建立起来的,实现不能接口的类完成的是不同的功能,接口是我们了解一个类功能的重要途径。

希望此文能够对大家有帮助。

抱歉!评论已关闭.