1、// 定义抽象类

1.1 定义Pet抽象类(abstract关键字)

public abstract class Pet {    //创建父类的私有属性        	private String name;		private int   age;		private int  health;		private String love;		public Pet(){		//System.out.println("父类无参构造方法");		}		public Pet(String name,int age,int health,String love){			this.name = name;				this.age  =  age;				this.health = health;				this.love  =  love;			//System.out.println("父类有参构造方法")		}		//父类的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 int getHealth() {		return health;	}		public void setHealth(int health) {		this.health = health;	}	public String getLove() {		return love;	}	public void setLove(String love) {		this.love = love;	}			//定义父类的普通打印方法		public void print(){				System.out .println(name+"\t"+age+"\t"+health+"\t"+love);			}			//普通方法		/*public void shout(){                 System.out.println("宠物的叫声!");             }*/        //抽象方法:访问修饰符+abstract关键字+返回值+方法名		//抽象方法必须在抽象类中,抽象方法没有方法体(也就是说没有大括号)		public abstract void shout();			}

//定义Dog子类extends继承Pet父类public class Dog extends Pet {// 子类私有属性    	public String strain;	//	public Dog() {//		//		//System.out.println("子类无参构造方法");//	}	public Dog(String name, int age, int health, String love,String strain) {				// Super引用父类属性				super(name, age, health, love);				//System.out.println("子类有参构造方法"); 			}		// 子类get方法	//	public String getStrain() {//		return strain;//	}//     子类set方法//	public void setStrain(String strain) {//		this.strain = strain;//	}	//子类方法重写	//	public void print(){		//       //Super引用父类方法//		System.out.println(super.getName()+"\t"+super.getAge()+"\t"+super.getHealth()+"\t"+super.getLove()+"\t"+strain);//	}		public void shout(){				System.out.println("名叫"+this.getName()+"的小狗汪汪的叫!");			}	}

//定义PetDemo测试类public class PetDemo {	public static void main(String[] args) {		//		Dog dog = new Dog("旺财",2,100,"友爱","泰迪");		//dog.setName("旺财");				//dog.strain="泰迪";				//dog.setAge(2);				//dog.setHealth(100);				//dog.setLove("友爱");		//		System.out.println(dog.getName()+"\t"+dog.strain+"\t"+dog.getAge()+"\t"+dog.getHealth()+"\t"+dog.getLove());//		dog.print();//		Penguin penguin = new Penguin();//		Pet pet1 = new Dog();		Pet pet2 = new Penguin();//		pet1.shout();		pet2.shout();//		Petshop petshop = new Petshop();		//		Pet pet3 = petshop.BuyPet();		//		pet3.shout();		//		if(pet3 instanceof Dog){			//			Dog dog1 = (Dog)pet3;//			System.out.println(dog1.getStrain());			//		}else{			//			Penguin penguin1 = (Penguin)pet3;//			System.out.println(penguin1.getSex());//		}				Pet dog = new Dog("旺财",12,100,"友爱","泰迪");				dog.shout();		}

结果验证:

名叫旺财的小狗汪汪的叫!

1.2 抽象类

抽象方法(必须在抽象类中)

必须使用abstract关键字

抽象类不能被实例化,它可以具有抽象方法或者普通方法

需求说明

实现某公司各种岗位的员工薪水计算,输出不同岗位各一名员工的工资。要求使用抽象类实现

分析

定义员工抽象类,具有计算薪水的抽象方法

定义子类:经理类、销售人员类、普通员工类,分别继承员工抽象类,重写计算薪水的方法;

定义测试类,包含输出薪水的方法,参数为员工对象;

// 定义员工Staff抽象类public abstract class Staff {	// 定义员工的salary薪水变量(私有属性)		private double salary ;		// 员工类的无参构造方法	public Staff() {				}		// 员工类的有参构造方法		public Staff(double salary) {				this.salary = salary;			}	// 薪水的getSalary方法		public double getSalary() {		return salary;	}	// 薪水的setSalary方法		public void setSalary(double salary) {		this.salary = salary;	}		// 计算薪水的抽象方法		public abstract void calcSalary();	}

// 销售员工market的类继承Staff员工类public class market extends Staff {	// 子类无参构造方法	public market() {				super();			}	// 子类的有参构造方法		public market(double salary) {				super(salary);			}	// 重写父类的抽象方法,calcSalary名称一致		public void calcSalary(){				System.out.println("销售的薪水为:"+(this.getSalary()+50000*0.06));			}}

// 定义销售员工的测试类进行验证public class marketDemo {	public static void main(String[] args) {				Staff mar = new market(500);				mar.calcSalary();			}}

结果验证:

销售的薪水为:3500.0

2、Java接口

示例 // 定义电源插座的接口,具有供电的能力;

package study;//    定义Socket接口public interface Socket {//	定义接口的抽象方法		public  void  getPower();	}

//定义类:电视类实现电源插座接口;

package study;// 定义电视机TV类引用Socket接口public  class TV implements Socket{// 重写引用接口的方法 getPower要一致		public void getPower(){				System.out.println("电视机插入电源插座开始播放电视节目。");			}	}

//定义测试类,包含电器开始工作的方法,参数为电器对象;

package study;//   定义测试类public class SocketDemo {		public static void main(String[] args) {		//	创建对象			Socket tv = new TV();		tv.getPower();		}}

结果验证:

电视机插入电源插座开始播放电视节目。

3、实现多个接口

练习

需求说明

在职研究生既要学习,还要工作,使用实现多个接口的方式定义研究生类;

分析

定义人类作为抽象父类,包含人的基本属性和行为;

定义学习接口,拥有学习能力 ;

定义工作接口,拥有工作能力;

定义研究生类,继承人类,同时实现学习接口和工作接口;

// 定义Person_student抽象类(父类)public abstract class Person_student {        // name属性     	public String name;	// 构造方法		public Person_student(String name) {			super();				this.name = name;			}	// get方法		public String getName() {			return name;			}	// set方法		public void setName(String name) {			this.name = name;			}	}

// 定义Work工作接口public interface Work {	public void getWork();	}

// 定义Study学习接口public interface Study {	public void getStudy();	}

// 定义Graduate_student研究生类继承Person_student父类,实现Work,Study接口public  class Graduate_student extends Person_student implements Work,Study {	// 继承父类属性name		public Graduate_student(String name) {			super(name);			}	// 实现Work接口,重写Work接口中的getWork方法		public void getWork(){			 System.out.println(this.getName()+"研究生具有工作能力。");		 	}		// 实现Study接口,重写Study接口中的getStudy方法		public void getStudy(){			 System.out.println(this.getName()+"研究生具有学习能力。");		 	}}

// 定义测试类public class GraduateDemo {	public static void main(String[] args) {			// 新建Graduate_student对象stu			Graduate_student stu = new Graduate_student("张三");		stu.getStudy();		stu.getWork();	    }}

结果验证:

张三研究生具有学习能力。

张三研究生具有工作能力。