OOP(三)抽象类与接口

抽象类与抽象方法

abstract修饰符定义的类或者方法。

规则:

  • 抽象类与抽象方法必须用abstract修饰
  • 抽象类不可实例化,可创建子类对象。
  • 抽象类可以有成员变量,普通方法,构造器,初始化块,内部类(接口,枚举)。
public abstract class Shape {
	{
		System.out.println("执行shape初始化块.");
	}
	private String color;
	public abstract double getzc();
	public abstract String getType();
	public Shape() {
		
	}
	//抽象类本身并不能实例化,但可声明子类对象
	//可以有构造器
	public Shape(String color)
	{
		System.out.println("执行shape构造器");
		this.color = color;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	
}
public class Triangle extends Shape {
	private double a;
	private double b;
	private double c;
	

	public Triangle(String color,double a, double b, double c) {
		super(color);
		this.setSide(a, b, c);
		
	}
	public void setSide(double a, double b, double c)
	{
		if(a>=b+c||b>=a+c||c>=a+b)
		{
			System.out.println("三角形两边之和必须大于第三边");
			return;
		}
		this.a = a;
		this.b = b;
		this.c = c;
	}

	@Override
	public double getzc() {
		return a+b+c;
	}

	@Override
	public String getType() {
		return "三角形";
	}
	public static void main(String[] args) {
		Shape s = new Triangle("black", 3, 4, 5);
		System.out.println(s.getType()+"\t"+s.getzc());
	}

}

接口

使用interface关键字定义。接口与接口直接可以实现多继承。

接口中可包含静态常量(接口默认添加public static final),抽象方法,静态方法,默认方法,内部类

package aboutinterface;
public interface Output {
//接口中的成员变量只能是常量--系统默认public static final
//普通方法默认为public abstract ;默认方法必须提供方法实现
	int MAX_A =50;
	void out();
	void getData(String s);
	//默认方法必须显式写出来
	default void print(String...s)
	{
		System.out.println(s);
	}
	default void test()
	{
		System.out.println("默认方法test()");
	}
	//静态方法
	static String staticTest()
	{
		return "接口中的静态方法";
	}
	
	
}
package aboutinterface;

public class OutputTest {

	public static void main(String[] args) {
		//访问接口中的静态常量
		System.out.println(Output.MAX_A);
		//访问接口中的静态方法
		System.out.println(Output.staticTest());

	}

}
public class InterfaceInheritanceTest {

	public static void main(String[] args) {
		System.out.println(interfaceC.i_A);
		System.out.println(interfaceC.i_B);
		System.out.println(interfaceC.i_C);

	}

}
interface interfaceA
{
	int i_A = 5;
	void testA();
}
interface interfaceB
{
	int i_B = 6;
	void testB();
}
//接口间可以多继承
interface interfaceC extends interfaceA,interfaceB
{
	int i_C = 7;
	void testC();
}

接口实现

public class InterfaceTest implements A {

	public static void main(String[] args) {
		InterfaceTest it = new InterfaceTest();
		it.print();

	}

	@Override
	public void print() {
		System.out.println("print...");

	}

}

interface A {
	void print();
}

接口与抽象类的区别

  • 接口中包含抽象方法,静态方法与默认方法,不能为普通方法提供实现,抽象类可包含普通方法
  • 接口中只能定义静态常量,不能定义普通成员变量,抽象类即可定义普通成员变量也可定义静态常量
  • 接口中不能有构造器,抽象类中可以有构造器为子类提供初始化
  • 抽象类只能单继承,接口可多继承,一个类只能继承一个抽象类,但一个类可以是实现多个接口

猜你喜欢

转载自blog.csdn.net/DaveMo/article/details/81084845