文章目录
- 壹、抽象类
- 贰、接口
前言:
我们前一章写了继承性,这一章节,一起来学习Java中的抽象类与接口相关知识。
壹、抽象类
1、定义:用关键字abstract
修饰的类称为抽象类(abstract类
)。
2、格式:
abstract class A{
......
}
3、特点:
(1)抽象类中可以有抽象方法;
与普通类相比,抽象类中既可以有抽象方法,也可以有非抽象方法。对于抽象方法,只允许声明,不可以实现,而且不允许使用 final
和 abstract
同时声明一个方法。看下面一个例子;
abstract class A
{
abstract int min(int x,int y);
int max(int x,int y)
{
return x>y?x:y;
}
}
(2)抽象类不能用new
运算符创建对象;
若一个非抽象类是一个抽象类的子类,在子类中必须重写父类中的抽象方法,给出方法体,即子类对于父类中的abstract所修饰的方法的重新声明,同时保证声明的方法名字,返回值类型,参数个数及类型于父类的抽象方法完全相同。
(3)做上转型对象
尽管抽象类不能创建对象,但继承下的子类必须重写子类中的其中的全部抽象方法,这样可以绕抽象类声明的对象成为其子类对象的上转型对象,并且调用子类重写的方法。
4、看一段代码展示
父类:
public abstract class A {
public abstract void print();
public void tell()
{
System.out.println("hello,world!");
}
}
子类:
public class B extends A{
@Override
public void print() {
System.out.println("I am a good boy.");
}
public static void main(String[] args) {
A a=new B();//上转型对象
a.print();
}
贰、接口
前言:接口的使用,在大型项目里面,非常普遍,将一个接口内的功能定义好,其他类直接通过关键字implements
来实现。
1、接口的声明和使用
(1)接口的声明
我们曾使用关键字class
来声明类,接口则是通过关键字interface
来声明,格式如下:interface 接口的名字
。
(2)接口体
接口体包含常量定义和方法定义两个部分。接口体中只进行方法的声明,不允许提供方法的实现,所以方法的实现没有方法体。
例如:
interface Printtable
{
final int Max=100;
void add();
float sum(float x,float y);
}
(3)接口的使用
一个类通过关键字implements
来声明自己实现一个或者多个接口。如果实现多个接口,则需要用逗号隔开,
如
class A implements Printable,Addable
大家在这里注意一下,继承下与接口的实现;
如:
class A extends B implements Printable,Addable
如果一个类实现某个接口,就必须实现接口内所有方法,即为这些方法提供方法体。同时保证声明的方法名字,返回值类型,参数个数及类型与接口完全相同。
注意,接口的方法默认为public
和abstract
,因而接口在声明方法是可以省略前面的public
和abstract
,但是类在实现接口方法时候就必须用public
来实现。
(4)看下面代码
接口:
public interface A {
void print();//只需要声明方法,无需实现
}
B实现A接口;
public class B implements A{
@Override
public void print() {
System.out.println("I am a good boy.");
}
public static void main(String[] args) {
B a=new B();//上转型对象
a.print();
}
}
(5)如果A接口中的所有方法在B中没有实现,会出现什么结果;
所有在实现接口时,我们需要将接口内的方法进行重写,即为实现方法。这与前面讲到的继承抽象类相似。
下一章,我们一起来学习接口与抽象类的比较,他们有什么相同,又有什么不同呢?