Java 抽象类 接口

抽象
抽象方法定义的格式:
public abstract 返回值类型 方法名(参数);
抽象类定义的格式:
abstract class 类名 {
}

public abstract class Fu {//抽象类
	public abstract void work();//抽象方法
	public void eat() {//抽象类可以放普通类
		System.out.println("吃饭");
	}
}

public class Zi extends Fu{
	public void work() {
		System.out.println("java工程师在工作");
	}
}

public class Zi2 extends Fu{
	public void work() {
		System.out.println("Android工程师在工作");
	}
}

  

特点
1、抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。
2、抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
3、只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
注意
1、抽象类一定是个父类 因为不断抽取而来的。
2、抽象类中可以定义普通方法。那这个抽象类的存在的意义是不让该类创建对象,方法可以直接让子类去使用
3、abstract 不能和 private(矛盾) 、final(常量) 、 static 一起用

接口

接口是功能的集合
接口只描述所应该具备的方法,并没有具体实现
这样将功能的定义与实现分离,优化了程序设计
接口定义时需要使用interface关键字
定义接口所在的仍为.java文件,虽然声明时使用的为interface关键字的编译后仍然会产生.class文件
定义格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
接口中的方法均为公共访问的抽象方法
接口中无法定义普通的成员变量
类实现接口。实现的动作类似继承,只是关键字不同,实现使用implements
格式
class 类 implements 接口 {
    重写接口中方法
}
接口中成员的特点
1、接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量,其值不能改变。后面我们会讲解static与final关键字
2、接口中可以定义方法,方法也有固定的修饰符,public abstract
3、接口不可以创建对象。
4、子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类。
接口的多实现

public interface Fu {
	public abstract void work();
}

public interface Zi {
	public abstract void eat();

}

public class Zi2 implements Fu,Zi{

	public void eat() {
		
	}

	public void work() {
		
	}
	
}

 
类继承类并实现接口

public abstract class Fu {//抽象类
	public abstract void work();//抽象方法
}

public interface Zi {
	public abstract void eat();

}

public class Zi2 extends Fu implements Zi{

	public void eat() {
		
	}

	public void work() {
		
	}
	
}

 
接口的多继承

public interface Fu {//抽象类
	public abstract void work();//抽象方法
	
}

public interface Zi{
	public abstract void eat(); 
}

public interface Zi2 extends Fu,Zi{
	public abstract void sleep();
}

 抽象类与接口的区别
1.抽象类中可以有普通成员变量,接口中没有普通成员变量
2.抽象类可以有构造方法,接口中不能有构造方法
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中可以包含静态方法,接口中不能包含静态方法
5. 抽象类中的抽象方法的访问类型可以是 public,protected ,
但接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型
6. 一个类可以实现多个接口,但只能继承一个抽象类。
7. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,
但接口中定义的变量只是public static final 类型,并且默认即为 public static final 类型。

应用

//定义抽象狗类
public abstract class Dog {
	public abstract void eat();
	public abstract void wang();
}
//定义缉毒接口
public interface Look {
	public void look();
}
//定义缉毒狗
public class Jd_Dog extends Dog implements Look{
	public void eat() {
		System.out.println("能吃");
	}
	public void wang() {
		System.out.println("能汪汪叫");
	}
	public void look() {
		System.out.println("找毒品");
	}
}

 

原文地址:https://www.cnblogs.com/cgj1994/p/9700139.html