抽象类

用abstract修饰的类

   抽象类:用abstract关键字声明的类称为抽象类

   很多具有相同特征和行为的对象可以抽象为一个类

   很多具有相同特征和行为的类可以抽象为一个抽象类

    1、抽象类可以没有抽象方法,有抽象方法的类必须是抽象类

    2、非抽象类继承抽象类必须实现所有抽象方法 

    3、抽象类可以继承抽象类,可以不实现父类抽象方法。

    4、抽象类可以有方法实现和属性

   5、抽象类不能被实例化

    6、抽象类不能声明为final

   7、抽象类可以有构造方法

public class Demo01 {
	public static void main(String[] args) {
		Man man=new Man();
		man.move();
		man.eat();
		
		Woman woman=new Woman();
		woman.move();
		woman.eat();
	}
}

abstract class Animal{
	public abstract void move();//方法的声明
}

abstract class Person extends Animal{
	public abstract void eat();
}

//继承抽象类的具体类必须实现所有的抽象方法

class Man extends Person{

	@Override
	public void eat() {
		System.out.println("我是男人,我爱吃肉");
		
	}

	@Override
	public void move() {
		System.out.println("我是男人,我爱跑步");
		
	}
	
}

class Woman extends Person{

	@Override
	public void eat() {
		System.out.println("我是女人,我爱吃水果");
		
	}

	@Override
	public void move() {
		System.out.println("我是女人,我爱逛街");
		
	}
	
}

运行结果:

      

我是男人,我爱跑步
我是男人,我爱吃肉
我是女人,我爱逛街
我是女人,我爱吃水果

接口

/*

 * interface 接口名称{

 *                 全局常量;

 *                 抽象方法;        

 * }

 */

//接口是所有行为的抽象面向编程的 面向编程的接口 目的是让程序更加易于维护,扩展性更强,接口只定义标准,而非具体实现

接口的使用规则:

(1)定义一个接口,使用interface关键字

(2)在一个接口中,只能定义常量、抽象方法,JDK1.8后可以定义默认的实现方法

(3)接口可以继承多个接口: extends xxx,XXX

(4) 一个具体类实现接口使用implements关键字

(5)一个类可以实现多个接口

(6)抽象类实现接口可以不实现接口的方法

(7)在接口中定义的方法没有声明访问修饰符,默认为public

(8)接口不能有构造方法

(9) 接口不能被实例化

public static void main(String[] args) {
		
		Girl mm=new Girl("ph");
		mm.sleep();
		mm.eat();
		mm.run();
		
	}

}

 	interface IEat{
 		//public abstract void eat();//接口只能定义抽象方法
 		void eat();
 		
 		//public static final int NUM=10;//定义常量
 		int NUM=10;
 	}
 	
 	interface IRun{
 		void run();
 	}
/* 	interface ISleep extends IEat{
 		void run();
 	}*/
 	
 	//接口可以多继承,类只能单继承
 	interface ISleep extends IEat,IRun{
 		void sleep();
 	}
 	
 	
 	 class Girl implements IEat,ISleep{
 		private String name;
 		public Girl(String name){
 			this.name=name;
 		}
 		
 		public Girl(){
 			
 		}
 		
 		public void run(){
 			System.out.println("我是"+this.name+",我爱飞");
 		}
 		
 		public void eat(){
 			System.out.println("我爱吃烤鸭");
 		}
 		
 		public void sleep(){
 			System.out.println("我爱睡觉");
 		}
 	}

运行结果:

我爱睡觉
我爱吃烤鸭
我是ph,我爱飞