第八章 抽象类与接口

1 抽象类

抽象类的语法格式:
abstract class 类名{ //abstract是关键字

}

//抽象类A
public abstract class A{
	String shape;
	double length;
}
-------- ----------------------------
//测试类
public class Test{
	public static void main(String[ ] args){
		A a=new A();//错误,抽象类不能被实例化
	}
}
注:抽象类需要abstract关键字修饰;
  普通类可以实例化,抽象类不可以实例化;
  抽象类不能实例化,抽象类中的抽象方法必须被子类重写;但是普通方法可以不被重写.
  抽象类可以有抽象方法,也可以由普通方法;还可以包含普通类的一切成员;
  抽象类可以没有抽象方法,但是抽象方法必须在抽象类中.
  被final修饰的类不能继承,所以final和abstract(可以被继承)修饰符不能修饰同一个类

2 抽象方法

抽象方法的语法格式
[访问修饰符] abstract <返回值类型> <方法名>([参数列表]);

注:抽象方法需要abstract关键字修饰,普通方法不要;
普通方法有方法体,抽象方法没有方法体.
抽象方法只能在子类中来实现.
抽象方法所在的类一定是抽象类,抽象类却可以没有抽象方法.
public abstract class A {//A类是抽象类
    String name;
 
    public abstract void show();//抽象方法
    
    public void infor(){//普通方法,不一定被子类重写
        System.out.println(this.name);
    }
}
----------------------------------------------------
public class B extends A{//B类继承A类
    public B() {
        this.name="张三";//自动拥有父类的所有属性;
    }

    @Override
    public void show() {//必须重写父类的抽象方法,可以不重写父类的一般方法
        System.out.println("B继承A,并重写A的show()方法");
    }
}
后记:抽象方法必须被子类实现.如果子类不需要这个方法,就会产生冗余.
另外,java只支持单继承,就会减少多样性.此时就需要接口

3 接口

3.1 什么是接口?

接口其实就是一个约定,是一种协议.我们通过这种协议去生产或者实现我们需要的功能.接口就是为了对类进行功能的接入而产生;
接口的语法结构:
public interface 接口名{

}

注:接口的修饰符必须是public,接口的关键字是interface;
接口中所有的方法必须是抽象方法;
接口中的属性是全局常量;

3.2 与抽象类一样,接口也必须通过子类来实现其方法.子类可以通过implements来实现接口的方法;

public interface Demo01 {

    public static final String NAME="张收纳";
    String GENDER="男";//接口中,默认属性都是常量,默认是public static final;

    public abstract void show();
    void infor();//接口中,默认都是常量,默认方法前缀是public abstract;

    /**
     * Created by shaoc on 2020/7/21.
     */
    interface Demo {
        static final double PI=3.14;

    }
}
-----------------------------------------------------------------------------------------------
public class Demo02 implements Demo01{
    @Override
    public void show() {
        //重写接口的抽象方法
    }

    @Override
    public void infor() {
        //重写接口的抽象方法
    }
}

注:1.接口与类 抽象类一样,命名规则相同;
   2.接口如果不写public修饰符,使用默认修饰符,则只在当前包可见;
   3.接口只能定义静态常量,需要初始赋值,不能定义变量;
   4.接口类没有构造方法;
   5.接口可以通过extends继承其他的接口;一个接口可以同时继承多个接口,
   但是,接口不能继承类;
   6.类只能继承一个父类,但可以实现多个接口:
    public class A extends B implements 接口1,接口2,接口3.....{
    
	}

3.3 接口的优势

        举例:手机可以打电话,发短信。普通手机和智能手机都继承手机,
因此,普通手机和智能手机都可以做手机可以做的事情(打电话、发短信)。
        但是,智能手机还可以上网,看电视。这些事情普通手机不能办到。而且, 不同的智能手机功能多少也不一样。有的干这个,有的干那个;
        因此,我们需要通过接口去实现不同的功能。可以设定网络接口、视频接口。网络设备通过网络接口与智能手机连接实现上网的功能,视频设备通过视频接口与智能手机相连,达到看视频的目的;
        接口就是工具桥梁,需要什么功能就通过接口去连接具体的功能;

猜你喜欢

转载自blog.csdn.net/qq_43055343/article/details/107517786
今日推荐