Java中的抽象类和接口

  • Post author:
  • Post category:java


一.抽象类

1.抽象类的定义

如果一个类中存在抽象方法,那么该类就必须声明为抽象类

2.抽象类的注意事项

1,抽象类不能实例化(不能创建对象)

2,抽象类中不一定有抽象方法,也可以有实例方法。但有抽象方法的类一定是抽象类

3,可以有构造方法

3.有关抽象类的说明

1.抽象方法不能包含在非抽象类中,在实现抽象类的子类中,必须实现所有的抽象方法,而且要注意的是抽象方法是非静态的。

2.抽象类是不能使用new操作来初始化的,但是仍然可以有构造方法,这个构造方法在它的子类的构造方法中调用。

3.包含抽象方法的类必须是抽象的,但是可以定义一个不含抽象方法的抽象类。

4.子类可以覆盖父类的方法并将它定义为abstract。

5.即使子类的父类是具体的,这个子类也可以是抽象的。

4.代码示例

1.定义抽象类

/**
 * @author WXF
 * @data
 * @description 定义合法的抽象类
 */

/** 文件名 A.class */
public abstract class A {
    
} 

/** 文件名 A.class */
public abstract class A {
    public abstract void unfinished();
}

/** 文件名 xxx.class */
abstract class A {
    
}

/** 文件名 xxx.class */
abstract class A {
    abstract void unfinished();
}

/** 文件名 xxx.class */
abstract class A {
    public void unfinished(){
    }
}

/** 文件名 xxx.class */
abstract class A {
    protected void unfinished(){
    }
}

2.继承抽象类

/**
 * @author WXF
 * @data 
 * @description 继承抽象类
 */
/** 文件名 Debug.class */

public class Debug {
	/** Main method */
	public static void main(String[] args) {
		Children child = new Children();
		child.print(); // 调用子类重写方法
		child.test(); // 调用父类的方法
	}
}

/** 抽象类 */
abstract class Parent {
	/* 抽象方法 */
	abstract void print();

	/* 非抽象方法 */
	public void test() {
		System.out.println("Parent\'s method");
	}
}

/** 实现抽象类的子类 */
class Children extends Parent {
	/* 重写父类的抽象方法 */
	@Override
	public void print() {
		System.out.println("Hello World!");
	}
}

二.接口

1.接口的定义

当一个类中的所有方法都是抽象方法的时候,我们就可以将其定义为接口。接口也是一种引用数据类型,它比抽象类还要抽象。

2.接口特性

1.接口中每一个方法也是隐式抽象的,接口中的方法也会被隐式的指定为public abstract。

2.接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final 变量。

3.接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。

4.当类实现接口的时候,类要实现接口中所有的方法,否则类必须声明为抽象类。

3.代码示例

1.定义接口

/**
 * @author WXF
 * @data 
 * @description 接口定义
 */
/** 文件名 A.class */

public interface A {
    /* 变量 */
	public static final int a = 0;
    
    /* 方法 */
    public abstract void method();
}

/** 上下两个接口的定义是等价的 */

public interface A {
    /* 变量 */
    int a = 0;
    
    /* 方法 */
    void method();
}

2.接口的实现

/**
 * @author WXF
 * @data 
 * @description 接口实现
 */
/** 文件名 Debug.class */

public class Debug {
    /** Main method */
    public static void main(String[] args) {
        Pen pen = new Pen(); // 调用实现接口的类
		pen.yellow();		// 调用改类方法
    }
}

/** 接口 */
interface Color {

	/* 抽象方法 */
	void yellow();
}

/** 实现接口 */
class Pen implements Color {

    /* 实现抽象方法 */
	@Override
	public void yellow() {
		System.out.println("My pen color is yellow");
	}
}

三.抽象类和接口的区别

尽管抽象类和接口之间存在较大的相同点,甚至有时候还可以互换,但他们直接仍具有差异之处。下面将从语法层次和设计层次两个方面对抽象类和接口进行阐述。



版权声明:本文为AMYCX原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。