abstract 关键字 抽象类/方法 匿名子类/对象 多态应用

abstract关键字 抽象的
可以用来修饰的结构:类、方法
abstract修饰类:抽象类

此类不能new实例化
抽象类中一定有构造器,便于子类实例化时调用。开发中,都会提供抽象类的子类,让子类对象实例化

abstract修饰方法:抽象方法

只有方法的声明,没有方法体
包含抽象方法的类,一定是一个抽象类。但是抽象类中可以没有抽象方法的,子类调用。
仅当子类重写了父类中的所有的抽象方法后,此子类才可实例化
若子类没有重写父类中的 所有 的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰

点击查看abstract代码
public class AbstractTest {
	public static void main(String[] args) {
		
		//一旦Person类抽象了,就不可实例化
//		Person p1 = new Person();
//		p1.eat();
		Person p1 = new Student();
		
		p1.eat();
		p1.walk();//子类调用
		p1.breath();
		
	}
}

abstract class Creature{
	public abstract void breath();
}

abstract class Person extends Creature{
	String name;
	int age;
	
	//抽象类中一定有构造器,只能让子类实例化时调用,自己不可以
	public Person(){
		
	}
	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	//抽象方法
	public void breath() {
		System.out.println("Person重写breath huxi空气");
	}
	public abstract void eat();
	
	public void walk(){
		System.out.println("非抽象方法 Person 走路");
	}
	
	
}


class Student extends Person{
	
	public Student(){
	}
	public Student(String name,int age){
		super(name,age);
	}
	
	public void eat(){
	  System.out.println("s重写eat 学生多吃有营养的食物学生+心无旁骛地写代码");
	}

	@Override
	public void breath() {
		System.out.println("s重写breath 学生应呼吸新鲜的没雾霾的空气");
	}
	
	public void walk(){
		System.out.println("非抽象方法STUDENT走路");
	} 
}

抽象类的匿名子类
Person本身不可以new,继承后重写没具体类名,匿名后要大{}重写具体方法

public class PersonTest {
	
	public static void main(String[] args) {
		
/*		method( new Student() );      //匿名对象
		
		Worker worker = new Worker();
		method1( worker );//非匿名的类 非匿名的对象
		
		method1( new Worker() );//非匿名的类 匿名的对象
*/		
		
		
		System.out.println("********************"); 
		
		//创建了一  匿名子类 的对象:p    重写了方法 
		Person p = new Person(){
//Person本身不可以new,继承后重写没具体类名,匿名后要大{}重写具体方法
			//Android开发里的setOnclickListener()里的参数
			@Override
			public void eat() {
				System.out.println("吃东西");
			}

			@Override
			public void breath() {
				System.out.println("好好呼吸");
			}
			
		};
		
		method1(p);
		
		System.out.println("********************");
		//创建 匿名子类 的匿名对象
		method1( 
				new Person() {
			@Override
			public void eat() {
				System.out.println("吃好吃东西");
			}

			@Override
			public void breath() {
				System.out.println("好好呼吸新鲜空气");
			}

		          }     
		        );
	}
	
	
	public static void method1(Person p){
		p.eat();
		p.breath();
	}

	public static void method(Student s){
		
	}
}

class Worker extends Person{

	@Override
	public void eat() {
	}

	@Override
	public void breath() {
	}
	
}
上一篇:抽象类笔记


下一篇:java抽象类