Javaでのabstractの詳細


Javaでのabstractの詳細
abstractキーワードはクラスとメソッドを修飾するためにのみ使用できます.定義されたクラスまたはメソッドが実装されていないことを示すために使用されます.
abstract定義
abstract class Person {//   
	
	public abstract String getDescription();//    
	
}

注意:
1つ以上の抽象メソッドを含むクラス自体を抽象として宣言する必要があります.
クラスは抽象メソッドを含まなくても抽象クラスとして宣言できます.
抽象クラスはインスタンス化できません.
抽象クラスには、特定のデータと特定のメソッドが含まれます.
abstract class Person {//   
	
	private int id = 10;//            
	
	public abstract String getDescription();//    
	
	public int getId(){//            
		return id;
	}
}

ただし、抽象的かどうかにかかわらず、汎用的なドメインとメソッドをスーパークラスに配置することをお勧めします.
public class Main {
	
	public static void main(String[] args){
		
		Person my;
		Person mine = new Person();//error          
	}
}

まとめ:
抽象メソッドは、サブクラスで具体的に実装される占有の役割を果たす.
抽象クラスを拡張するには、次の2つの方法があります.
1つは、サブクラスで抽象メソッドまたは抽象メソッドの一部を定義しても定義しないことです.このようなサブクラスも抽象クラスとして定義する必要があります.
二つ目は、サブクラスにすべての抽象メソッドを定義することであり、このようなサブクラスは抽象的である必要はありません.
簡単な例:
/**
 *    
 * @author wangcan
 *
 */
abstract class Person {//   
	
	private String name;
	
	public Person(String name) {
		this.name = name;
	}

	public abstract String getDescription();//    
	
	public String getName(){
		return name;
	}
}
class Student extends Person{
	
	private String school;
	
	public Student(String name,String school) {
		super(name);
		this.school = school;
	}
	@Override
	public String getDescription() {
		return "a student "+super.getName()+" study in" + school;
	}
}
public class Main {
	
	public static void main(String[] args){
		Person[] people = new Person[2];
		people[0] = new Student("  ","CSDN");
		people[1] = new Student("  ", "CUMT");
		for(Person p:people){
			System.out.println(p.getDescription());
		}
	}
}