1.学习目标:学习Java的面向对象的抽象方法,抽象类和接口
2.学习内容:
2.1 抽象方法
将子类的共性方法抽出,放进父类中,但子类的具体方法不同,此时将父类中的方法抽象化
2.2 抽象类
存在抽象方法的类,叫做抽象类
2.3 接口
一种规则,行为的抽象
创建接口:public interface 接口名{}
实现:public class 类名 implements 接口名{}
扩展:
允许在接口中定义默认方法,需要使用default关键字修饰(用于接口升级时,已经使用接口的类无需重写方法;在重写时删去default)
3.知识运用
3.1 编写带有抽象类的标准的JavaBean类
代码如下
父类animal类
public abstract class animal {
//成员方法
private String name;
private int age;
//无参构造函数
public animal() {}
//有参构造函数
public animal(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();
//成员方法
public void drink(){
System.out.println("喝水");
}
}
子类frog类
public class frog extends animal{
public frog() {
}
public frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("青蛙吃虫子");
}
}
子类dog类
public class dog extends animal{
public dog() {
}
public dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("狗狗吃骨头");
}
}
子类sheep类
public class sheep extends animal{
public sheep() {
}
public sheep(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("绵羊吃草");
}
}
测试类
public class test {
public static void main(String[] args) {
frog f = new frog("青蛙王子",6);
dog d = new dog("jerry",10);
sheep s = new sheep("肖恩",8);
print(f);
f.eat();
f.drink();
print(d);
d.eat();
d.drink();
print(s);
s.eat();
s.drink();
}
public static void print(animal a){
if(a instanceof frog){
frog f = (frog) a;
System.out.println(f.getName() + " " + f.getAge() + "岁");
}
else if(a instanceof dog){
dog d = (dog) a;
System.out.println(d.getName() + " " + d.getAge() + "岁");
}
else if(a instanceof sheep){
sheep s = (sheep) a;
System.out.println(s.getName() + " " + s.getAge() + "岁");
}
}
}
3.2 编写带有接口和抽象类的标准的JavaBean类
代码如下
父类animal
public abstract class animal {
//成员方法
private String name;
private int age;
//空参构造方法
public animal() {}
//有参构造方法
public animal(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();
//成员方法
public void drink(){
System.out.println("喝水");
}
}
接口swim
public interface swim {
public abstract void swim();
}
子类frog
public class frog extends animal implements swim{
public frog() {
}
public frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("青蛙吃虫子");
}
@Override
public void swim() {
System.out.println("蛙泳");
}
}
子类dog
public class dog extends animal implements swim{
public dog() {
}
public dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("狗狗吃骨头");
}
@Override
public void swim() {
System.out.println("狗刨");
}
}
子类rabbit
public class rabbit extends animal{
public rabbit() {
}
public rabbit(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("兔子吃胡萝卜");
}
}
测试类
public class test {
public static void main(String[] args) {
interface_practice.animal f = new frog("青蛙王子",6);
interface_practice.animal d = new dog("jerry",10);
interface_practice.animal r = new rabbit("流氓兔",8);
print(f);
f.eat();
f.drink();
((frog) f).swim();
print(d);
d.eat();
d.drink();
((dog) d).swim();
print(r);
r.eat();
r.drink();
}
public static void print(animal a){
if(a instanceof frog){
frog f = (frog) a;
System.out.println(f.getName() + " " + f.getAge() + "岁");
}
else if(a instanceof dog){
dog d = (dog) a;
System.out.println(d.getName() + " " + d.getAge() + "岁");
}
else if(a instanceof rabbit){
rabbit r = (rabbit) a;
System.out.println(r.getName() + " " + r.getAge() + "岁");
}
}
}