接口测试【封装、继承、多态】

1、父类

package com.wyq.study;

public class Pers {
	//书写类
	//书写属性
	private String name;
	private int age;
	//提供共有的取值赋值方法
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return age;
	}
	//无参构造
	public Pers(){
		super();
		System.out.println("这里是父类的无参构造");
	}
	//带参构造
	public Pers(String name,int age){
		super();
		this.name = name;
		this.age = age;
		System.out.println("这里是父类带参的构造方法"+this.name+"\t"+this.age);
	}
	//父类的普通方法 
	public void speak(String language){
		System.out.println("这里是父类的测试:\n"+name+"今年"+age+"岁了,正在说"+language);
	}
}

2、接口1

package com.wyq.study;

public interface Dance {
	//接口中的属性
	public static final int DanceAge = 10;
	//接口中的抽象方法
	public abstract void dan();
}

2、接口2

package com.wyq.study;

//抽象类
public interface Sing {
	//抽象类中的属性
	public static final String danceName = "草原";
	//抽象类中的普通方法
	public abstract void sin(String sinName);
}

3、子类【继承父类,重写父类的方法,实现子类,实现子类中的方法】

package com.wyq.study;

public class LaoWang extends Pers implements Dance,Sing{
	private String job;
	public void setJob(String job){
		this.job = job;
	}
	public String getJob(){
		return job;
	}
	public LaoWang(){
		super();
		System.out.println("这里是子类的无参构造");
	}
	public LaoWang(String name,int age,String job){
		super(name,age);
		this.job = job;
		System.out.println("这里是子类的带参构造方法,其参数为:"+super.getName()+"\t"+super.getAge()+"\t"+job);
	}
	
	@Override
	public void speak(String language) {
		super.speak(language);
		System.out.println("这里是重写父类的方法,老王会说"+language+"\t"+super.getName()+"\t"+super.getAge()+"\t"+job);		
	}
	@Override
	public void dan() {
		System.out.println("测试子类中的跳舞方法"+job+"\t"+super.getName()+"\t"+getAge()+this.DanceAge);		
	}
	@Override
	public void sin(String sinName) {
		System.out.println("这里是测试唱歌的方法"+danceName+"\t"+this.DanceAge);
		
	}
	
}

4、测试类

package com.wyq.study;

public class TestLaoWang {
	public static void main(String[] args) {
		/**
		 * 使用多肽,父类new子类对象
		 * 这种情况只能调用父类中的方法
		 */
		Pers p = new LaoWang("张三",18,"程序员");
		p.speak("昌平话");
		System.out.println("这里是测试多肽"+p.getName()+"\t"+p.getAge()+"\t");
		System.out.println("____________________________");
		/**
		 * 使用接口进行new
		 * 这种情况只能定义接口中的方法
		 */
		Dance d =  new LaoWang("李四",20,"公务员");
		d.dan();
		System.out.println("这里是测试接口类的方法"+d.DanceAge);
		System.out.println("***************************");
		Sing s = new LaoWang("王五",22,"老师");
		s.sin("旭日阳刚");
		System.out.println("这里是测试唱歌的方法"+s.danceName);
		/**
		 * 自己创建自己的对象
		 * 这种情况下,可以调用重写/实现父类中的方法,还可以调用实现接口的方法
		 */
		LaoWang lw = new LaoWang("马六",24,"交警");
		lw.dan();
		lw.sin("姑娘我爱你");
		lw.speak("英国话");
		System.out.println("这里是测试子类自己"+lw.getName()+"\t"+lw.getAge()+"\t"+lw.getJob()+lw.danceName+"\t"+lw.DanceAge);
		
	}

}

5、输出的结果

这里是父类带参的构造方法张三	18
这里是子类的带参构造方法,其参数为:张三	18	程序员
这里是父类的测试:
张三今年18岁了,正在说昌平话
这里是重写父类的方法,老王会说昌平话	张三	18	程序员
这里是测试多肽张三	18	
____________________________
这里是父类带参的构造方法李四	20
这里是子类的带参构造方法,其参数为:李四	20	公务员
测试子类中的跳舞方法公务员	李四	2010
这里是测试接口类的方法10
***************************
这里是父类带参的构造方法王五	22
这里是子类的带参构造方法,其参数为:王五	22	老师
这里是测试唱歌的方法草原	10
这里是测试唱歌的方法草原
这里是父类带参的构造方法马六	24
这里是子类的带参构造方法,其参数为:马六	24	交警
测试子类中的跳舞方法交警	马六	2410
这里是测试唱歌的方法草原	10
这里是父类的测试:
马六今年24岁了,正在说英国话
这里是重写父类的方法,老王会说英国话	马六	24	交警
这里是测试子类自己马六	24	交警草原	10

6、总结

1)一个子类只能继承一个父类,但是可以实现N多个接口

2)接口中不允许定义构造方法,因为接口不是类

3)接口中的变量都应该是public static final类型的,public static final 常常可以省略,接口中的变量被final修饰,因此必须初始化

4)jdk1.8之前,接口或者抽象类中的抽象方法是不允许有方法体的

5)在jdk1.8之后,在接口中可以定义方法,并含有方法体,单是要求必须写default关键字

6)类与接口的关系是类必须实现接口,实现接口中的方法

7)如果一个类既存在继承关系,又存在实现关系,那么要去extends继承在前,implements实现在后

8)抽象类中的抽象方法可以用abstract来修饰,abstract可以省略不写

9)如果一个类中的所有方法都是抽象方法,那么这个类就是接口

10)定义成接口之后,public abstract可以省略不写

11)接口中的方法都是默认的公共的抽象方法

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/91893273
今日推荐