摘要:抽象类和接口抽象类抽象方法是只有方法签名,没有方法实现的方法。抽象类不能被实例化,抽象类可以包含方法抽象和普通成员变量构造器初始化块内部类接口枚举种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。
抽象类和接口 1.抽象类
抽象方法是只有方法签名,没有方法实现的方法。有抽象方法的类只能被定义成抽象类,抽象类可以没有抽象方法。抽象方法和抽象类必须使用abstract修饰符来定义。
抽象类不能被实例化,抽象类可以包含方法(抽象和普通)、成员变量、构造器、初始化块、内部类(接口、枚举)5种成分。抽象类的构造器不能用于创建实例,主要用于被其子类调用。
public abstract class Shape { { System.out.println("执行Shape的初始化块"); } private String color; public abstract double calPerimeter(); public abstract String getType(); public Shape() { } public Shape(String color) { System.out.println("执行Shape的构造器"); this.color = color; } set,get..... } ----------------------------------------------------------------------------- public class Triangle extends Shape { public static void main(String[] args) { Shape triangle = new Triangle("red", 1, 2, 2); System.out.println(triangle.calPerimeter()); System.out.println(triangle.getType()); } private double a; private double b; private double c; public Triangle(String color, double a, double b, double c) { super(color); this.setSides(a,b,c); } public void setSides(double a,double b,double c){ if(a+b<=c||a+c<=b||b+c<=a){ System.out.println("三角形两边之和必须大于第三边"); return; } this.a = a; this.b = b; this.c = c; } @Override public double calPerimeter() { return a+b+c; } @Override public String getType() { return "三角形"; } static abstract class test{ } }
final和abstract不能同时使用,static和abstract不能同时使用(并不是绝对互斥,可以同时修饰内部类)。
抽象类避免了子类设计的随意性,抽象类体现的就是一种模板模式的设计。
2.Java 8改进的接口抽象类是从多个类中抽象出来的模板,如果将这种抽象进行进行的更彻底,则可以提炼出一种更加特殊的“抽象类”-----接口。接口里不能包含普通方法,接口里所有的方法都是抽象方法。Java 8 以后,允许在接口中定义默认方法,默认方法可以提供方法实现。
接口体现的是规范和实现分离的设计哲学。
[修饰符] interface 接口名 extends 父接口1,父接口2... { 零个到多个常量定义... 零个到多个抽象方法定义... 零个到多个内部类、接口、枚举定义... 零个到多个默认方法或类方法定义... }
接口定义的是一种规范,因此接口里不能包含构造器和初始化代码块定义。接口里可以包含成员变量(只能是静态常量),方法(抽象、默认、类),内部类(包括内部接口、枚举)定义。
//系统自动为接口里定义的成员变量增加public static final修饰符 int MAX_SIZE=50; public static final MAX_SIZE=50; 接口里的普通方法不管是否使用public abstract修饰符,系统自动为接口里定义的普通方法增加public abstract修饰符。 接口里定义的内部类、内部接口、内部枚举默认都采用public static修饰符。
public interface Output { int MAX_CACHE_INT=50; void out(); void getData(String msg); default void print(String... msgs){ for(String msg:msgs){ System.out.println(msg); } } default void test(){ System.out.println("默认的test()方法"); } static String staticTest(){ return "接口里的类方法"; } }3.接口和抽象类
相同点:
接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。
接口和抽象类都可以包含抽象方法,实现接口或继承抽像类的普通子类必须实现这些抽象方法。
不同点:
接口里只能包含抽象方法和默认方法,不能为普通方法提供方法实现;抽象类则可以包含普通方法。
接口里只能定义静态常量;抽象类可以定义普通成员变量。
接口里不包含构造器,初始化块;抽象类包含。
4.内部类内部类的作用:
提供更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
内部类成员可以直接访问外部类的私有数据。
匿名内部类适合用于创建那些仅需要一次使用的类。
内部类比外部类多使用三个修饰符:private、protected、static,非静态内部类不能拥有静态成员。
在Java 8之前,被局部内部类、匿名内部类访问的局部变量必须使用final修饰,Java 8以后不必,系统默认。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/68978.html
摘要:在抽象类中,声明的是,可是。抽象类只能作为子类的超类,子类继承抽象类时必须被实现。它根本不存在方法的实现实现子类使用关键字来继承抽象类。添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。转自,抽象类与接口的区别 抽象类与接口 抽象类与接口一样,都不能被实例化,可以有具体实现的方法,也可以有抽象的方法。在抽象类中,声明的field是static、final,method可...
摘要:前言是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。面对对象基本概述概述是基于面向过程的变成思想,是对面向过程的一种封装。面对对象开发就是不断的创建对象,使用对象,指挥对象做事情。面对对象设计其实就是在管理和维护对象之间的关系。 前言 java是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。 面对对象,主要包括:面向对象思想,类与对象及其使用,对象的内存图,成...
摘要:很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。在讨论它们之间的不同点之前,我们先看看抽象类接口各自的特性。抽象类抽象类是用来捕捉子类的通用特性的。 很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。 在讨论它们之间的不同点之前,我们先看看抽象类...
摘要:案例演示抽象类的成员特点抽象类的成员方法特性抽象方法强制要求子类做的事情。抽象类中定义的是该继承体系的共性功能。 1.多态的概述及其成员访问特点代码体现 A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提- 1.要有继承关系 2.要有方法重写 3.要有父类引用指向子类对象。 C:多态中的成员访问特点之 成员变量:编译和运行都看父类。 成员方法:编...
阅读 3872·2021-11-24 10:46
阅读 1778·2021-11-16 11:44
阅读 2259·2021-09-22 16:02
阅读 1367·2019-08-30 15:55
阅读 1090·2019-08-30 12:46
阅读 530·2019-08-28 18:31
阅读 2708·2019-08-26 18:38
阅读 1062·2019-08-23 16:51