Java学习第六章重点
6.1 接 口
- 接口声明:
接口包含有接口声明和接口体,和类的定义很相似,但不同点是,接口使用关键字interface来声明自己是一个接口。 - 例子:
interface Printable//接口声明,
{
final int MAX=100;//无法定义变量,只有常量且有数值,甚至可以没有final
void add();//只有抽象方法
float sum(float x,float y);
}
6.2 接口实现
- 类实现接口
在Java语言中,接口由类来实现以便使用接口中的方法。一个类需要在类中使用关键字 implements 声明该类实现一个或多个接口。如果实现多个接口,用逗号隔开接口名。
举例:
class A extends B implements C,D
{
类体
}
class AA implements C,D
{
类体
}
-
重写接口中的方法
如果一个非抽象类实现了某个接口,那么这个类必须重写这个接口中的所有方法。 -
实现接口的类的子类自然也实现了该接口
举例:
}
class AA implements C,D
{
类体
}
class B extends//已经实现了该接口
{
类体
}
-
接口可以被继承,可以通过 extends 声明一个接口是另一个接口的子接口。接口中的方法与常量都是public的,子接口也将继承父类的全部方法和常量。
-
可以用接口名访问接口的常量
6.3 接口的UML图
顶层:名字层,需要用<
第二层:常量层,列出接口中的常量及类型,格式是“常量名字”,类型。
第三层:方法层,也称操作层,列出接口中的方法及返回类型,格式是“方法名字(参数列表):类型”。
6.4 接口回调
接口属于引用型变量,接口变量中可以存放实现该接口的类的实例的引用,即存放对象的引用。比如:假设Com是一个接口,那么就可以用Com声明一个变量:
Com com;
A a=new A();
com=a;//只能可以调用A类中的接口方法
可以把实现某一接口的 类创建的对象的引用(类似于C语言中的地址)赋值给该接口声明的接口变量 ,该接口变量就可以调用被类实现的接口。
6.5 重点:理 解 接 口
##关键点:
- 接口可以抽象出重要的行为标准,该行为标准用抽象方法来表示。
- 可以把实现接口的类的对象的引用赋值给接口变量,该接口变量可以调用被该类实现的接口方法,即体现该类根据接口里的行为标准给出的具体行为。
- 接口只是 行为标准,具体内容由不同的类去声明。
课本例题:
package 第六章;
abstract class MotorVehicles {
abstract void brake();
}
interface MoneyFare
{
void charge();
}
interface ControlTemperature
{
void controlAirTemperature();
}
class Bus extends MotorVehicles implements MoneyFare
{
public void charge() {
System.out.println("公交汽车刹车");
}
void brake() {
System.out.println("公交:价格一元/张");
}
}
class Taxi extends MotorVehicles implements MoneyFare,ControlTemperature
{
public void charge() {
System.out.println("出租车收费");
}
public void controlAirTemperature() {
System.out.println("出租车空调");
}
void brake() {
System.out.println("出租车刹车");
}
}
public class Example_6_5
{
public static void main(String[] args)
{
Bus bus = new Bus();
Taxi taxi = new Taxi();
MoneyFare fare;
ControlTemperature temperature;
bus.brake();
fare=bus;//引用赋值
fare.charge();//接口的方法是bus中定义的
taxi.brake();
fare=taxi;
temperature=taxi;
fare.charge();
temperature.controlAirTemperature();
}
}
6.6 接口与多态
多态是指,不同的类在实现同一接口时可能具有不同的实现方法,那么接口变量在回调时就可能具有多种形态。
可以看一下6.5的例子,类在重写接口方法的时候方法体不同,也是这也是多态。
6.7 接口参数
如果一个方法的参数是接口类型,我们就可以将任何实现该接口的类的实例的引用传递给该接口参数,那么接口参数就可以回调类实现的接口方法。
举例:
package 第六章;
interface SpeakHello//声明接口
{
void speakhello();
}
class Chinese implements SpeakHello
{
public void speakhello()//重写接口方法
{
System.out.println("您吃饭了吗?");
}
}
class English implements SpeakHello
{
public void speakhello()//重写接口方法
{
System.out.println("Hello, how is it going!");
}
}
class Kindspeak
{
public void lookhello(SpeakHello hello)//接口类型参数
{
hello.speakhello();//接口回调
}
}
public class Example_6_6 {
public static void main(String[] args) {
Kindspeak speak=new Kindspeak();
speak.lookhello(new Chinese());
speak.lookhello(new English());
}
}
6.8 重 点:abstract类与接口的比较
比较如下:
- abstract类和接口都可以有abstract方法
- 接口中只可以有常量,不能有变量,而abstract既可以有常量也可以有变量。
- abstract类中也可以有非abstract方法,接口不可以。
如果某个问题需要使用继承才能更好地解决,比如,子类除了需要重写父类的abstract方法,还需要 从父类继承一些变量或继承一些重要的非abstract方法 ,就可以考虑使用abstract类。
如果某个问题 不需要使用继承,只是需要若干个类给出某些重要的abstract方法的实现细节 ,就可以考虑使用接口。
6.9 难 点:面向接口编程
抽象类将其抽象方法的实现交给其子类,而接口将其抽象方法的实现交给实现该接口的类。
接口只关心操作,但不关心这些操作的具体实现细节,把主要精力放在程序设计上,而不拘泥于细节的实现。
核心思想:接口回调
开——闭原则
6.10 难 点:应用举例
应用目的:设计一个广告牌,希望所设计的广告牌可以展示许多公司的广告词
- 问题分析
是否有哪些数据,需要什么功能,行为,标准。 - 设计接口(也可以使用抽象类)
显示内容,显示公司名字(两个行为标准)
public interface Advertisement {
public void showAdvertisement();
public String getCorpName();
}
- 设计广告牌类
public class AdvertisementBoard {//负责创建广告牌
public void show(Advertisement adver)
{
System.out.println(adver.getCorpName()+"的广告如下");
adver.showAdvertisement();//接口回调
}
}
public class CompanyA implements Advertisement {//A公司广告
public void showAdvertisement() {
System.out.println("@@@@@@@@@@@@@@@");
System.out.println("我家还蛮大的!");
System.out.println("@@@@@@@@@@@@@@@\n\n");
}
public String getCorpName() {
return "杰哥之家";
}
}
public class CompanyB implements Advertisement{//B公司广告
public void showAdvertisement() {
System.out.println("@white@give@");
System.out.println("机器学习 人白给!");
System.out.println("@white@give@\n\n");
}
public String getCorpName() {
return "白给之源";
}
}
public class Guanggao {
public static void main(String[] args) {
AdvertisementBoard board = new AdvertisementBoard();
board.show(new CompanyA());
board.show(new CompanyB());
}
}
要熟练使用接口回调技术以及面向接口编程的思想,以便体现程序设计所体长的“开——闭”原则
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
Hao.Jia's Blog!
喜欢就支持一下吧