抽象类:如果一个类中存在抽象方法,那么这个类必须声明为抽象类。
抽象方法:将共性的方法抽取到父类中之后,由于每个子类所执行的内容不一样,在父类中不能确定具体的方法体,则该方法为抽象方法。
接口:就是对一种规则对行为的抽象。
抽象方法的定义语法
public abstract 返回值类型 方法名(参数列表);
抽象类的定义语法
public abstract class 类名{}
注意: 1.抽象类不能创建对象。
2.抽象类中不一定有抽象方法,但是只要有抽象方则该类一定为抽象类。
3.抽象类可以有构造方法(给抽象类创建一个子类便可以调用抽象类中的构造方法了。
4.抽象类的子类:1.要么子类全为抽象类2.要么重写抽象类中所有的抽象方法
接口的定义(interface)
public interface 接口名(){}
接口与接口之间是实现关系(implement),并不是继承关系
例如:
public interface 类名 implement 接口名(){}
注:1.接口不能实例化 。
2.接口和类之间为实现关系通过implement来实现
3.接口的子类要么为抽象类,要么重写接口中的所有抽象类方法。
4.接口与类之间可以单实现也可以多实现。public class student implement study,play(){}
5.实现类还可以在继承一个类的同时实现接口。public class student extend person implement study(){}。
最后奉献一个简单的接口代码:
要求: p运动员(psport):姓名,年龄,学p,说英语
b运动员(bsport):姓名,年龄,学b
p老师(pteacher) : 姓名,年龄,教p,说英语
b老师(bteacher): 姓名, 年龄,教b
思路: 先对每一个元素进行拆分重组
1.每一个人都有姓名和年龄, 因此抽取一个父类(person)来存放所有的人
2.psoprt 和 pteacher 都会说英语, 因此抽取一个英语的接口。
3.psport和bsport 都是在学习 , 因此定义一个抽象类(sprot)来存放如何学习。
4.pteacher和bteacher 都是在教学 , 因此定义一个抽象类(teacher)来存放如何教学。
5.简化为person 为父类 teacher 和sport来继承 person, pteacher和bteacher继承teacher
psport和bsport 来继承sport。
父类person
//使得外界创建person类的对象没有意义 abstract
public abstract class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
public String toString() {
return "Person{name = " + name + ", age = " + age + "}";
}
}
sport类
public abstract class Sport extends Person{
public Sport(){}
public Sport(String name, int age){
super(name,age);
}
public abstract void Sport();
}
teacher类
public abstract class Teacher extends Person {
public Teacher(){}
public Teacher(String name , int age){
super(name, age);
}
public abstract void teacher();
}
bsport和psport类 接口speak
public class baSport extends Sport{
public baSport(){}
public baSport(String name , int age){
super(name,age);
}
@Override
public void Sport(){
System.out.println("学习篮球");
}
}
public class ppSport extends Sport implements speak{
@Override
public void Sport(){
System.out.println("学习乒乓球");
}
public ppSport(){}
public ppSport(String name , int age){
super(name, age);
}
@Override
public void speakEnglish(){
System.out.println("用英语交流");
}
}
public interface speak {
public abstract void speakEnglish();
}
bteacher类和pteacher类
public class baTeacher extends Teacher{
public baTeacher(){}
public baTeacher(String name , int age){
super(name, age);
}
@Override
public void teacher(){
System.out.println("教打篮球");
}
}
public class ppTeacher extends Teacher implements speak{
public ppTeacher() {
}
public ppTeacher(String name, int age) {
super(name, age);
}
@Override
public void teacher() {
System.out.println("教打乒乓球");
}
@Override
public void speakEnglish(){
System.out.println("用英语交流");
}
}
测试类
public class Test {
public static void main(String[] args) {
baSport b1 =new baSport("篮球运动员",21);
System.out.println(b1.getAge()+b1.getName());
b1.Sport();
ppSport p1 = new ppSport("乒乒球运动员",22);
System.out.println(p1.getAge()+p1.getName());
p1.Sport();
p1.speakEnglish();
ppTeacher p2 = new ppTeacher();
p2.speakEnglish();
p2.teacher();
baTeacher b2 = new baTeacher();
b2.teacher();
}
}
以上就是对抽象类抽象方法以及接口的全部认识
如有不足之处请批评改正。