abstract应用及抽象类

1.抽象类的定义

        1.1 抽象类是一种模板模式。子类可以继承这个模板进行扩展。

        1.2 通过抽象类,避免了子类设计的随意性。抽象类可以定义抽象方法,子类继承抽象类就必须实现这些抽象方法才能进行实例化。

2.格式

           abstract class 类名称{

                    属性;

                    方法;

            }

            抽象方法格式:权限修饰符 abstract 返回值类型  方法名();

3.代码示范

        定义抽象类Person,有抽象方法eat().

public abstract class Person {
	//属性
	private String name;
	private int age;
	private char gender;
	int i;
	//构造方法
	public Person(){}
	public Person(String name, int age, char gender){
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	//生成get/set方法
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
	public int getAge(){
		return age;
	}
	public void setAge(int age){
		this.age = age;
	}
	public char getGender(){
		return gender;
	}
	public void setGender(char gender){
		this.gender = gender;
	}
	public String toString(){
		return "name="+name+", age="+age+", gender="+gender;
	}
	//eat方法
	public abstract void eat();
	//sleep方法
	 void sleep(){
		System.out.println("这是sleep方法。。。");
	}
}

定义学生类,继承了Person类,实现了Person类的eat()方法

public class Student extends Person{
	//属性
	private int score;
	int i = 10;
	//构造
	public Student(){}
	public Student(String name, int age, char gender, int score){
		super(name, age, gender);
		this.score = score;
	}
	//生成get/set方法
	public int getScore(){
		return score;
	}
	public void setScore(int score){
		this.score = score;
	}
	public String toString(){
		return "name="+getName()+", gender="+getGender()+", score="+score;
	}
	@Override
	public void sleep() {
		System.out.println("学生的sleep方法。。。");
	}
	public void score(){
		System.out.println("学生的score方法。。。");
	}
	@Override
	public void eat() {
		System.out.println("实现的抽象方法:eat方法");
		
	}
}

测试类

public class Test {
	public static void main(String[] args) {
		//多态测试
		Person p = new Student("李四", 18, '男', 99);
		System.out.println(p.i);
		System.out.println(p.getName());
		p.eat();
		p.sleep();
		System.out.println(p);
	}
}

结果

0
李四
实现的抽象方法:eat方法
学生的sleep方法。。。
name=李四, gender=男, score=99

总结:

        1.抽象方法和抽象类必须要用abstract来修饰;

        2.抽象方法没有方法体,只需声明不需实现(没有方法体);

        3.有抽象方法的类必须是抽象类;

        4.抽象类里面的方法不一定都是抽象方法,也可能没有抽象方法;

        5.抽象类可以包括属性,方法和构造方法;

        6.抽象类不能被实例化,只能被继承,子类继承重写方法之后可以利用多态的对象向上转型,为其实例化;

        7.抽象方法必须被子类实现。子类必须重写了所有抽象方法才能被实例化,否则子类还是抽象类。


        

猜你喜欢

转载自blog.csdn.net/sunming0129/article/details/79767217
今日推荐