抽象类及接口

4抽象类及接口

4.1 final关键字

1. final关键字在Java中被称为完结器,表示最终的意思。

2. final关键字可以声明类、属性和方法:

定义:final class 类名{ }

修饰符 final 返回值类型 方法名(){ }

3. 

① 使用final声明的类不能被继承。

 

② 使用final声明的方法不能被重写。

 

③ 使用final声明的变量会变为常量,常量是不可修改的。

4.2抽象类

1. 抽象类:包含一个抽象方法的类就是抽象类。

2. 抽象方法:声明而未被实现的方法,抽象方法必须使用abstract关键字声明。

3. 抽象类被子类继承,子类(不是抽象类)必须重写抽象类中的所有抽象方法。

4. 定义:abstract class 类名{

属性;

方法;

抽象方法;//不是必须的

}

 

抽象方法:修饰符 abstract 返回值类型 方法名();//注意最后是以分号结尾。

 


 

 

5. 抽象类不能直接实例化,必须通过子类实例化。

 


 

4.3接口

1. 接口是Java中非常重要的概念。接口定义了一系列的抽象方法和常量,形成一个属性集合。

2. 接口定义完成后任何类都可以实现接口,且一个类可以实现多个接口。接口用来弥补Java单继承带来的不足。

3. 实现接口的类必须实现接口中定义的抽象方法。

4.3.1接口的定义

1. 定义:

修饰符 interface 接口名{

//接口内容

//声明变量

类型 变量名;

……

//声明方法

返回值类型 方法名(); //分号结尾

……

}

① 接口的修饰符只能是默认的(无修饰符)或public。当修饰符是默认的,接口是包可见的,在接口所在的包之外的类不能使用接口。修饰符为public时,任何类都可以使用该接口。

② 接口内的变量被自动设置为共有的、静态的、最终的字段。如: int age; 实际效果是: public static final int age; 在接口定义变量时可以把它明确定义为public static final,但因为字段会被自动地设置为这些类型,所以可以不写出。变量名用大写字母表示。

③ 接口定义的方法都是抽象方法,被自动设置为public abstract

④ 接口也被保存为.java文件,文件名与接口名相同。

⑤ 完整地接口定义如下:

 

 

4.3.2接口的实现

(一)接口的实现是指具体实现接口的类。接口的声明仅仅给出了抽象方法,实现接口的类必须要实现接口中定义的方法。

(二)实现接口的形式:

class 类名 implements 接口1,接口2{

方法1(){

//方法体

}

方法2(){

//方法体

}

}

① 多个接口用逗号隔开;

② 如果实现接口的类不是抽象类,它必须实现接口中定义的所有方法。如果该类为抽象类,在它的子类甚至子类的子类中要实现接口中定义的方法。

③ 实现接口的方法必须使用相同的方法名和参数列表。

④ 实现接口类中的方法必须被声明为public,因为在接口中的方法都被定义为public,根据继承的原则,访问范围只能放大不能缩小。

(三)实例

接口定义如下:

interface Grandfather{

int GAE = 100;

void say();

void sleep();

}

实现接口的类如下:

class Father implements Grandfather{

 

//实现say方法

public void say() {

System.out.println("father");

}

 

//实现sleep方法

public void sleep() {

System.out.println("I sleep 8 hours");

}

 public static void main(String[] args) {

Father s = new Father();

s.say();

s.sleep();

}

}

(四)接口之间也可以有继承关系。继承接口的接口拥有它的父类接口的方法,他还可以定义自己的方法,实现这个子接口的类要实现所有这些方法。

interface grandfather{

int GAE = 100;

void say();

void sleep();

}

 

 interface father extends grandfather{

 void eat();

 }

class daughter implements father{

 

@Override

public void say() {

System.out.println("daughter");

}

 

@Override

public void sleep() {

System.out.println("I sleep 10 hours");

}

 

@Override

public void eat() {

System.out.println("I like eat fruits");

}

public static void main(String[] args) {

daughter d = new daughter();

d.eat();

 

}

 }

4.4抽象类和接口的比较

l 一个类可以实现多个接口,但只能继承一个抽象类。

l 抽象类可以有非抽象方法;接口中定义的方法必须全部是抽象方法。

l 抽象类中定义的方法修饰符可以是public/protected/private,也可以是默认值;但在接口中只能是public

l 抽象类可以有构造函数,接口不能。两者都不能实例化,但是都能通过它们来存放子类对象或是实现类的对象。可以说它们都可以实现多态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值