11.8学习笔记(抽象类,接口)

6.5 抽象类
抽象类属于一个不完整的普通类,这种不完整的类必须使用abstract关键字进行声明。同时在抽象类之中还可能包含有抽象方法,即那些只声明而未实现的方法,所有的抽象方法没有方法体,必须使用abstract关键字进行定义

abstract class A{ //定义抽象类
public void fun(){
System.out.println(“helloworld”);
}
//抽象方法,里面没有定义方法体
public abstract void get();
}
public class Test{
public static void main(String args[]){
A a=new A(); //实例化对象
}
}
//报错

抽象类不能直接利用关键字new实例化
1.抽象类必须有子类,而且子类(不是抽象类)必须覆写抽象类之中的全部抽象方法
上面程序加上
class B extends A{ //定义抽象类的子类
public void get(){ //定义方法体
this.fun(); // fun()是继承而来
}
}

2.利用对象的向上转型
main函数加上
A a=new B(); //向上转型
a.get();

一个类永远不要去继承一个实现好的类,所有的类必须继承抽象类(或者实现接口)
抽象类规定了子类必须要做的事情,即:抽象类的子类必须按照严格的要求覆写抽象类中的方法
抽象类声明时不允许使用final
抽象类之中即使没有抽象方法,也不能被直接实例化

6.6 接口
如果现在一个类之中的基本结构就是抽象方法与全局变量,这样的类一般都利用接口的概念进行表示,在java之中接口使用interface关键字进行定义,而接口之中的组成只有抽象方法与全局变量。
接口定义完成之后如果要使用接口,那么必须为接口定义子类,而且子类(如果不是抽象类)则要求覆写接口之中的全部抽象方法。而且子类使用implements关键字来实现接口

interface A{ //定义了一个接口
//全局变量
public static final String INFO=“helloworld”;
public abstract void fun();
}
interface B{ //接口
public abstract void get();
}
//X类同时实现A B两个接口
class X implements A,B{
public void fun(){
System.out.println(“这是A方法”);
}
public void get(){
System.out.println(“这是B方法”);
}
}
public class Test{
public static void main(String args[])
//System.out.println(A.INFO)
A a=new X(); //子类为父接口实例化
B b=new X(); //子类为父接口实例化
a.fun();
b.get();
}
}

接口的两个重点说明:
1.在接口之中所定义的全部方法永恒都public,即:写与不写都是public
2.在接口之中即使简写代码,也和完整编写是同样的功能
interfafe A{
public static final String INFO=“helloworld”;
public abstract void fun();}
等价于
interface A{
String INFO=“helloworld”;
void fun();
}

如果一个普通类既要求实现接口又要求其继承抽象类的话,那么请先编写extends继承,然后再编写implements实现,类似如下结构:
class 类 extends 抽象类 implements 接口,接口,……{}

interface A{ //定义了一个接口
//全局变量
public static final String INFO=“helloworld”;
public abstract void fun();
}
interface B{ //接口
public abstract void get();
}
abstract class C{
public abstract void set();
}
class X extends C implements A,B{
public void fun(){
System.out.println(“这是A方法”);
}
public void get(){
System.out.println(“这是B方法”);
}
public void set(){ //抽象类的方法
System.out.println(“抽象类的方法”);
}
public class Test{
public static void main(String args[])
//System.out.println(A.INFO)
A a=new X(); //子类为父接口实例化
B b=new X(); //子类为父接口实例化
a.fun();
b.get();
c.set();
}
}

抽象类可以利用implements实现多个接口,但是接口不能利用extends去继承抽象类

interface A{}
interface B{}
abstract class C impletments A,B{}
public class Test{
public static void main(String args[]){}
↑正确
interface A{}
interface B extends C{}
abstract class C impletments A{}
public class Test{
public static void main(String args[]){}
↑错误

虽然接口不能利用extends继承抽象类,但是接口却可以使用extends继承多个接口,称为接口的多继承操作。
interface A{public void printA();}
interface B{public void printB();}
interface C extends A,B{public void printC();}
class X implements C{
public void printA(){}
public void printB(){}
public void printC(){}
}

接口的使用原则:
1.接口一般作为标准出现
2.接口可以表示一种能力
3.为客户端提供远程方法支持

6.7 接口与抽象类的区别
1.声明方法
抽象类:abstract
接口:interface
2.包含方法
抽象类:抽象方法,普通方法,构造方法,常量、变量,全局变量……
接口:全局变量,抽象方法
3.使用方法
抽象类:extends
接口:implements
4.继承形式
抽象类:单继承
接口:多继承

6.8 USB接口标准定义

猜你喜欢

转载自blog.csdn.net/weixin_43621813/article/details/83990135