标签:final private strong 出现 完全 面试题 作用 efault lan
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类
在java语言中使用abstract class
来定义抽象类
public abstract class MyAbsClasss {
private int age;
public MyAbsClasss(){
this.age = 10;
}
public abstract void m2();
//其他包的子类可以访问,相对比较安全
protected abstract void m1();
//如果不加修饰符的话,其他包的类如果想要继承这个类的话就不能成功,
//因为子类必须实现抽象方法,但是default的实现又无法访问
abstract void m3();
//private abstract m4(); //编译无法通过,抽象方法必须被继承
}
抽象类的作用是:抽象类是用来捕捉子类的通用特性的,是被用来创建继承层级里子类的模板
综述,抽象类有如下限制 :
抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口里面只是包含方法和静态常量:
public interface MyInterface {
//public static final 可以省略
int A = 10;
//public 可省略
void getA();
//接口中不能使用protected,因为接口设计的目的就是对所有类公开
//protected getB();
}
抽象类和接口的区别是什么?
接口支持多继承,类只是支持单继承
从属性和方法两个角度来回答:
接口只能声明常量,抽象类可以声明类变量,成员变量,常量
public abstract class MyAbsClasss {
private int age;
protected static String name;
public static final String gender = "qqq";
}
public interface MyInterface {
//public static final 可以省略
int A = 10;
}
接口只能声明抽象方法(1.8之前,1.8之后可以声明静态方法和default方法),抽象类可以声明所有类型的方法
public interface A {
void m();
default void m1(){
System.out.println("A");
}
static void m2(){
}
}
public abstract class AbstractClass {
public void m1(){
}
private void m3(){
}
private static void m4() {
}
protected void m5(){
}
public static void m2(){
}
}
如果接口只有抽象方法的话可以完全不必考虑子类的多继承,但是从jdk1.8之后添加了static和default方法,静态方法无需担心子类的问题,因为静态方法不能被重写,但是default方法却出现了一个小矛盾。试想:如果我们现在有两个接口A和B,里面都实现了m1()方法,那么子类C同时继承接口A和B会不会出现什么问题呢?
public interface A {
default void m1(){
System.out.println("A");
}
}
public interface B {
default void m1(){
System.out.println("B");
}
}
//如果不重写m1方法的话,是无法编译通过的
public class C implements A,B {
@Override
public void m1() {
A.super.m1();//使用这个方法告诉调用子类和调用父接口的哪一个默认方法
}
}
接口为什么多继承,类为什么单继承?
标签:final private strong 出现 完全 面试题 作用 efault lan
原文地址:https://www.cnblogs.com/muhexiong/p/14220113.html