Java基础之抽象类与接口
Posted liualex1109
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基础之抽象类与接口相关的知识,希望对你有一定的参考价值。
1.抽象类
抽象就是从多个事物中将共性的,本质的内容抽取出来。在Java中用abstract关键字修饰class来表示抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
public abstract class Animal { }
关于抽象类和抽象方法的使用注意:
(1)抽象类和抽象方法必须使用abstract关键字修饰。
(2)抽象类不能实例化,即使有构造函数。只能使用多态的方法来实例化。
abstract class Animal { } class Cat extends Animal { } Animal obj = new Cat();
(3)抽象类不一定有抽象方法,但是有抽象方法的类一定是抽象类。
(4)关于抽象类的子类,要么全部实现了该抽象类的抽象方法,要么该子类也是抽象类,只实现或不实现部分抽象方法。
(5)抽象类的成员变量可以是变量,也可以是常量(用final修饰)。
(6)abstract关键字只能修饰类和方法,不能修饰成员变量(属性)。
(7)抽象类也是可以有构造方法的,该构造方法可以被子类调用来初始化抽象类的成员变量。
abstract class Animal { private String name; private int age; public Animal(String name, int age) { super(); this.name = name; this.age = age; } public abstract void eat();
/*
get/set ...
*/ } class Cat extends Animal { public Cat(String name, int age){ super(name,age); } @Override public void eat() { // TODO Auto-generated method stub System.out.println("吃小鱼干"); } }
(8)abtract关键字不能与static、final、private关键字共存。
(9)抽象方法不能有方法体,即没有{}。
public abstract void run();
(10)构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
abstract class Person { //Illegal modifier for the constructor in type Person; only public, protected & private are permitted /*abstract Person(){ //错误写法 }*/ //public static abstract void run(); }
2.接口
接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。
[可见度] interface 接口名称 [extends 其他的接口名] {
// 声明变量 // 抽象方法
}
接口的特性:
(1)接口是隐式抽象的,当声明一个接口时,不必使用abtract关键字。
(2)接口中的方法也是隐式抽象的,声明同样不需要abstract关键字。
(3)接口中的方法和属性都是公有的(public)。
(4)当声明接口时,只能使用public和abstract来修饰。
(5)接口中的方法只能用 public, abstract, default, static 来修饰。
(6)当类实现接口时,类要实现接口中所有的方法,否则,类必须声明为抽象类。
interface AInterface { public void run(); } class A implements AInterface { @Override public void run() { // TODO Auto-generated method stub } }
abstract class B implements AInterface {
}
(7)类是单继承,多实现的。一个接口也可以继承另一个接口,但不能实现另一个接口。而且接口可以多继承。
interface AInterface { public void run(); } interface BInterface { public void eat(); } interface CInterface extends AInterface,BInterface{ } class C implements CInterface { @Override public void run() { // TODO Auto-generated method stub } @Override public void eat() { // TODO Auto-generated method stub } }
(8)接口中的成员变量实际是用public static final修饰的。
(9)标记接口:标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。
(10)接口是无法被实例化的,也没有构造函数。
3.接口与类的相似点和区别:
(1)一个接口可以有多个抽象方法;
(2)接口不能用于实例化对象;
(3)接口没用构造方法;
(4)接口中的所有方法必须是抽象方法。(Java1.8允许存在用static和default修饰的方法);
(5)接口不能包含成员变量,除了static和final变量;
(6)接口支持多继承;
4.抽象类和接口的区别:
(1)抽象类的方法可以有方法体,但接口中的方法不行;
(2)抽象类的成员变量可以是各种类型的,而接口的成员变量只能是public static final类型
(3)一个类只能继承一个抽象类,而一个类可以实现多个接口。
以上部分内容来自于 Java菜鸟教程 https://www.runoob.com/java/java-interfaces.html
以上是关于Java基础之抽象类与接口的主要内容,如果未能解决你的问题,请参考以下文章