首页 > 其他 > 详细

接口和抽象类

时间:2020-06-13 10:05:51      阅读:60      评论:0      收藏:0      [点我收藏+]

1.java中的接口

public interface DialogListener {
    void cancel();
    void show(String str, String str2);
}

在日常的代码书写过程中我们经常会定义类似于这样的接口。但是我们需要注意:
就像String默认是final修饰的一样,接口中定义的方法都是默认用public abstract修饰的 。
此外接口中的变量也是默认用public static final修饰的。

java对接口的限制还是比较大的,默认修饰意味着只能这么来,接口没有构造,不能实例化,声明的抽象方法还不能有方法体,不能有静态代码块。

可能是java设计人员觉得自己对接口的设计太苛刻了些,所以从java8开始支持默认方法和静态方法。

 default void showWaittingDialog(){
        System.out.println("this is a default method");
    };
    static void a(){
        System.out.println("this is a static method");
    }

2.java中的抽象类

抽象类的一般定义

public abstract class Dialog {
	private String name;
	private int size;
	public Dialog() {
		// TODO Auto-generated constructor stub
	}
	public void show() {
		System.out.println("this is my dialog");
	}
        public abstract void error();
        static void a() {
		System.out.println("this is a static method");
	}
}

我们可以看到定义一个抽象类好像和平时我们定义一个类没多大区别,只是多了一个abstract关键字。
但是实际上一个抽象类和普通类的区别还是蛮大的。
1.首先我们要明白我们定义抽象类是干嘛的,不就是为了有子类可以继承嘛。所以抽象类的权限修饰符要大于private,不然它就没办法继承了呀。
2.普通类里面不能声明抽象方法,抽象类里面可以包含抽象方法(包含的抽象方法不可以有方法体),也可以不包含。
3.抽象类的子类必须实现抽象类中的抽象方法(除非抽象类的子类还是抽象类,总之当普通类继承抽象类的时候要实现抽象类的抽象方法)

可能有人会觉得,接口和抽象类它们只存在一个就可以满足我们的开发需要了(我怎么可以唯心的打出这句话,罪过),接口和抽象类在日常开发中用的我都想吐了,它们的共存的最大原因就是java中类的单继承和接口的多实现。

3.java8接口和抽象类的区别

1.抽象类中的成员变量访问权限不做限制,接口中的成员变量只能用public static final修饰。
2.抽象类中的方法的访问权限可以是大于private的类型,接口中的抽象方法只能是public类型。
3.抽象类中可以有普通方法,静态代码块,构造方法,接口中这些都没有。
4.抽象类的单继承,接口的多实现。

接口和抽象类

原文:https://www.cnblogs.com/dearnotes/p/13099873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!