在多态中父类方法体是多余的,永远不可能执行,所以出现了抽象方法,又因为类中含有抽象方法则该类必须为抽象类;
删除父类方法方法体-->抽象方法-->一个类含有抽象方法-->则该类必须为抽象类
Mammal抽象类
package com.lanou.util;
//关键字 abstract可以修饰类和方法
/**
* 哺乳动物抽象类
* abstract修饰的类称为抽象类
*/
public abstract class Mammal {
/**
* abstract修饰的方法叫做抽象方法,
* 注意:抽象方法只有声明部分,而没有具体的方法体。
*/
public abstract void move();
/**
* 抽象方法:吃
*/
public abstract void eat();
public void sleep(){
System.out.println("躺着睡觉");
}
}
package com.lanou.util;
/**
* 鲸鱼类继承哺乳动物抽象类
*/
public class Whale extends Mammal{
/**
*实现父类Mammal中的move抽象方法
*/
@Override
public void move() {
System.out.println("鲸鱼靠鱼鳍移动......");
}
/**
* 实现父类Mammal中的eat抽象方法
*/
@Override
public void eat() {
System.out.println("鲸鱼吃虾和鱼......");
}
/**
* 抽象类不能被直接实例化,即不能使用关键字new来创建该抽象类的对象
d
* @param args
*/
// public static void main(String[] args) {
// new Mammal();
// }
}
1.抽象类可以有构造方法,但不能创建对象
2.抽象类可以没有抽象方法
3.抽象方法不可以用static.final修饰 访问权限不能用private修饰
4.抽象类的子类必须实现抽象类所有的抽象方法,否则子类也必须使抽象类
Java接口是抽象方法的集合
需求:设计教师、程序员类,教师能教课,程序员可以写代码,他们都会开车,都会做饭。提示: 开车定义在Driving接口中,做饭定义在Cooking接口中,让教师和程序员实现2个接口。
父类Person
package com.lanou.util;
public class Person {
private String name;
private int age;
//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 Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
//toString方法
public String toString() {
return "姓名:" + name + ",年龄:" + age;
}
public void showinfo(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
在java中,使用interface关键字来定义接口
接口Cooking
package com.lanou.util;
//接口Cooking
public interface Cooking {
public abstract void cook();
}
接口Driving
package com.lanou.util;
public interface Driving {
//开车
public abstract void dirve();
}
接口的实现类:实现接口的类称为接口的实现类
教室Teacher类
package com.lanou.util;
public class Teacher extends Person implements Driving,Cooking {
public Teacher(){
super();
}
public Teacher(String name,int age){
super(name,age);
}
//教课
public void teach(){
System.out.println(this.getName()+"正在授课");
}
//Cooking接口中的方法
@Override
public void cook() {
System.out.println("教师做饭");
}
//Dirving接口中的方法
@Override
public void dirve() {
System.out.println("教师开车");
}
}
程序员Programmer类:
package com.lanou.util;
public class Programmer extends Person implements Cooking,Driving{
public Programmer(){
super();
}
public Programmer(String name,int age){
super(name, age);
}
//写程序
public void writeProject() {
System.out.println(this.getName() + "正在写项目");
}
//Cooking接口中的方法
@Override
public void cook() {
System.out.println("程序员做饭");
}
//Driving接口中的方法
@Override
public void dirve() {
System.out.println("程序员开车");
}
}
特点
1.一个类可以实现多个接口,接口与接口之间用逗号隔开,
2.接口没有构造方法(因为接口成员变量三Buff加身)
3.变量:public static final
总结区别
抽象类
1.关键字:abstract
2.成员变量:可以包含任意合法成员变量
3.可以有构造方法
4.方法:可以包含任意合法方法(包括各种访问级别的非抽象类方法和非抽象方法实例,也包含除private的非静态抽象方法)
5.如何实现抽象类的方法:通过继承实现抽象类中的所有抽象方法(若不想实现抽象类的所有抽象方法,除非你本身也是个抽象类)
6.是否存在继承:不存在 ,只能继承有一个
接口
1.关键字:interfae
2.成员变量:只能包含公开静态常量(默认public static final)
3.没有构造方法
4.方法:JDK7及其以下版本JDK只能包含公开且抽象的方法(默认由public abstract修饰),而JDK8开始可以包含default、static修饰的非抽象方法
5.如何实现抽象方法:通过implements接口实现接口中的抽象方法
6.是否存在多继承:存在因为一个接口可以继承多个接口
原文:https://www.cnblogs.com/fzf007007/p/14852762.html