抽象类和接口
不可以new
多态思想
抽象类
abstract class Abs{
public abstract void add();
}
public abstract void add();
descriptor: ()V
flags: ACC_PUBLIC, ACC_ABSTRACT
继承抽象类要重写抽象的父类方法
接口
interface Inter{
}
{
}
成员变量
interface Inter{
int a=1;
}
{
public static final int a;
descriptor: I
flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: int 2
}
成员方法
interface Inter{
void m();
}
{
public abstract void m();
descriptor: ()V
flags: ACC_PUBLIC, ACC_ABSTRACT
}
新增default和static方法
interface Inter{
static void printS() //接口方法
{
System.out.println("S");
}
default void printD() //实例方法
{
System.out.println("D");
}
}
{
public static void printS();
descriptor: ()V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: getstatic #1 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #2 // String S
5: invokevirtual #3 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 12: 0
line 13: 8
public void printD();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
0: getstatic #1 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #4 // String D
5: invokevirtual #3 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 16: 0
line 17: 8
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 this Lcom/ms/Inter;
}
接口中的static 变量会继承到子类中
public class T16 {
public static void main(String[] args) {
Iimp iimp=new Iimp();
System.out.println(iimp.a); 2
}
}
interface Inter{
int a=2;
}
class Iimp implements Inter{
}
public class T17 {
public static void main(String[] args) {
System.out.println(IAnimal.animalName==AnimalImp.animalName);false
}
}
interface IAnimal{
String animalName="A";
}
class AnimalImp implements IAnimal{
static String animalName=new String("A");
}