抽象类
抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,
设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并
覆盖抽象方法,实现具体功能。
抽象类
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象
类。
● 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方
法和构造方法。
● 用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必
须定义成抽象类。
● 特点:
● 抽象类不能被实例化,但可以有构造方法,因为抽象类中含有无具体实现的方法,
所以不能用抽象类创建对象。
● 抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实
现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一
样。否则,该类也必须声明为抽象类。
/*定义一个人类,在人类中定义了一个抽象的方法*/
public abstract class Person {
public abstract void speak();
}
/*定义了一个中国人类继承人类,其中具体实现了speak()类
注意:Chinese类也可以不实现具体的speak功能,但是这样Chinese类也必须定义为抽象类。
*/
public class Chinse extends Person{
@Override //重写了speak方法
public void speak() {
System.out.println("中国人说中国话");
}
}
抽象方法
抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.
注意:抽象类中可以没有抽象方法,但是,有抽象方法的类一定是抽象类。
抽象方法必须用abstract关键字进行修饰
/*定义一个人类,在人类中定义了一个抽象的方法*/
public abstract class Person {
public abstract void speak();
}
接口
接口的定义和使用
接口的定义
jdk8之前 接口只能定义 静态常量 和 抽象方法
jdk8之后 接口增加了静态方法 默认方法.
使用 interface 关键字用来声明一个接口。
[访问修饰符] interface 接口名称 [extends 其他的接口名1,….其他的接口名n]
{
// 声明常量 抽象方法 静态方法 默认方法
}
/*设计一个动物接口*/
public interface Animal{
//public static final int num = 10;
int num = 10; //接口中的成员变量默认是 静态常量
//public abstract void eat();
void eat(); //接口定义抽象方法
//静态方法 直接通过接口名调用
public static void testStatic(){
System.out.println("testStatic");
}
//默认 通过子类对象调用
public default void testDefault(){
System.out.println("testDefault");
}
}
接口的使用
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
[访问修饰符] class 类名 implements 接口名1,接口名2……{ }
结合继承:
[访问修饰符] class 类名 extends 父类名 implements 接口名1,接口名2……{ }
//public abstract class Dog implements Animal{
//接口实现和子类继承父类一样,实现类要么定义成抽象类,要么重写接口里面的所有抽象方法。
public class Dog extends Object implements Animal{
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
接口的特性
• 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字
• 接口中方法可以是抽象的,静态的,默认的
• 接口中声明的属性默认为 public static final 的
• 接口不是被类继承了,而是要被类实现
• 接口不能实例化对象,无构造方法
• 一个类可以实现多个接口
• 与继承关系类似,接口与实现类之间存在多态性
• 一个接口能继承其它多个接口
• 当类实现接口的时候,类要实现接口中所有的抽象方法。否则,类必须声明为抽象的类
接口和抽象类的相似性
1 接口和抽象类都不能实例化对象,它们都位于继承树的顶端,用于被其他类实现和继承。
2 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
接口和抽象类的区别
-
声明时修饰符不同,接口用interface关键字修饰,抽象类修饰用abstract关键字进行修饰;
-
接口是被其他类实现了(关键字implements),抽象类作为一个类,被其他子类继承(extends)了。
-
接口里只能包含抽象方法,不能为普通方法提供方法体,实现方法;抽象类则完全可以包含普通方法。
-
接口中的成员变量只能是 public static final 类型的,并且必须初始化,否则通不过编译。(抽象类中的成员变量可以是各种类型的。
-
接口中没有构造方法(接口中只包含抽象方法,静态方法,默认方法),抽象类可以包含构造方法,抽象类里的构造方法并不是用于创建对象,而是让其子类调用这些构造方法来完成属于抽象类的初始化操作。
-
接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
-
而一个类却可以实现多个接口。却只能继承一个抽象类。
从本质上讲,接口是一种特殊的抽象类,这种抽象类中包含抽象方法。
接口存在的意义:java中一个类只能有一个父类,所以用接口可以实现多继承的逻辑 。
本文详细介绍了Java中的抽象类和接口,包括抽象类的定义、特点、抽象方法的说明,以及接口的定义、使用、特性,并对比了两者之间的相似性和区别。抽象类不能被实例化,有抽象方法的类必须定义为抽象类;接口是隐式抽象的,接口中的方法默认为抽象的,接口可以被类实现,一个类可以实现多个接口。
280

被折叠的 条评论
为什么被折叠?



