今天看了一下,java的基础面试题,关于抽象类和抽象方法的总结

何为抽象类和抽象方法?

在类的前面有修饰符abstract的类称为抽象类,同理在方法的前面有修饰符abstract修饰的方法称为抽象方法。

那么抽象类和普通类有什么区别呢?

总结如下:


(1)抽象类可以有抽象方法和非抽象方法例如:

abstract class A{
	abstract int min(int x,int y);
	int max(int x,int y){
		return x>y?x:y;
		
	}
}

而普通类不可以有抽象方法例如:

public class Something {
	public  abstract String doSomething ();
}
类名中会报错The type Something must be an abstract class to define abstract methods,

方法中会报错The abstract method doSomething in type Something can only be defined by an abstract class。


(2)抽象类不能用new创建实例(即对象,但是子类继承了抽象类那么子类必须重写抽象父类的抽象方法。例如

class B extends A{

	@Override
	int min(int x, int y) {
		// TODO Auto-generated method stub
		return 0;
	}
	
}
只需要重写抽象方法,普通方法自己选择

(3)抽象类不允许使用final修饰符,并且必须是public和友元权限,故不能使用private和protected

(4)如果抽象类的子类还是抽象类,那么这个子类即可以重写父类的抽象方法,也可以继承父类的抽象方法

abstract class A{
	abstract public int min(int x,int y);
	int max(int x,int y){
		return x>y?x:y;
		
	}
}

abstract class C extends A{
	public abstract int min(int x,int y);
}
abstract class D extends A{
	
	public int min(int x,int y){
		
		return x<y?x:y;
		
	}
	
}
注意:无论是继承还是重写父类的方法,权限都必须跟高于或等于父类的权限,因为在java中父类可以使用子类的的方法

============================================================

接下来是抽象方法的总结:

(1)抽象方法不能有方法体,所以没有{}这对大括号,最后面要接分号“;”,实例如下:

public  abstract String doSomething ();
(2)不允许使用final修饰,权限不能是private

abstract class Something {
	 
	public  abstract String doSomething ();
	//出现错误The abstract method doA in type Something can only 
	//set a visibility modifier, one of public or protected
	private  abstract String doA ();
	protected  abstract String doB ();
	abstract int doInt();
}




猜你喜欢

转载自blog.csdn.net/QQ70945934/article/details/51090428