一.先导
子类具有共性的方法抽取到父类中,由于每个子类执行的方法体是不一样的,所以父类抽取的方法不确定方法体,用abstract修饰,就是抽象方法.当一个类中拥有一个抽象方法,该类则被定义为抽象类.
二.抽象类与抽象方法
1.抽象类语法形式:
访问权限修饰符 abstract class 类名{}
2.特点:
1.不能创建实例对象,可以被继承,可以有属性,构造方法(抽象类通过子类实例化)
2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
3.抽象方法一定写在抽象类或者接口中
4.抽象类的子类要不重写所有抽象方法,要不本身就是抽象类
3.抽象方法语法形式:
访问权限修饰符 abstract 返回值类型 方法名();
4.类继承抽象类,重写抽象方法
快捷键:alt+shift+回车
**抽象类,抽象方法的最终目的:统一,无法确定方法体,强制让子类按照某种格式书写
三.接口
接口是一种规则,他与抽象类完全不同.抽象类表示一类事物,接口表示一类行为
1.定义:
接口就是特殊的抽象类,即所有方法都是抽象方法的抽象类就是Java中的接口
接口简单理解就是一种约定,接口是设计层面的概念,往往由设计师设计,将定义与实现分离,程序员实现接口,实现具体方法
2.声明形式:
[访问权限修饰符] interface 接口名{
1、[public] [static] [final] 数据类型 变量名;
2、[public] [abstract] 返回值类型 方法(参数列表 );
3、静态方法
4、默认方法
}
3、接口实现类
实现类的声明形式如下:
[访问权限修饰符][修饰符] class 类名 [extends 父类名] [implements 接口列表]{
必须重写接口中的所有抽象方法( ){ }
}
注意:
1.接口和类的实现关系可以单实现,也可以多实现
public class 类名 implements 接口名1,接口名2{}
2.继承类还可以在继承一个类时,实现多个接口
public class 类名 extends 父类 implements 接口名1,接口名2{}
创建父类Animal
package pratice2;
public abstract class Aniamal {
private String name;
private int age;
public Aniamal() {
}
public Aniamal(String name, int age) {
this.name = name;
this.age = age;
}
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 abstract void eat();
}
接口
package pratice2;
public interface SwimIterface {
abstract void swim();
}
子类
package pratice2;
public class Frog extends Aniamal implements SwimIterface{
@Override
public void eat() {
System.out.println("吃虫子");
}
@Override
public void swim() {
System.out.println("蛙泳");
}
}
测试类
package pratice2;
public class Test {
public static void main(String[] args) {
Frog f=new Frog();
f.eat();
f.swim();
}
}
4、接口与抽象类的区别
5.接口中成员的特点
1.成员变量:只能是常量,默认用public static final来修饰
2.构造方法没有
3.成员方法:只能是抽象方法.默认用public abstract 来修饰
6.接口继承接口
接口可以继承多个接口
声明形式: [访问权限修饰符] interface 接口名 extends 接口名1,接口名2... {
}
一个类最多只能继承一个类,但是可以实现多个接口,接口可以继承多个接口。