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)接口中的方法都是默认的公共的抽象方法