抽象类,接口,继承

本文通过具体示例讲解了Java中抽象类和接口的概念及使用方法,包括如何定义抽象类与接口,如何通过子类实现抽象方法,以及如何利用接口扩展类的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接看代码

package 学习;

public class Cat extends Animal{
    @Override
    public void sound() {
        System.out.println("miao");
    }

    public static void main(String[] args) {
        Cat cat = new Cat();//有一个cat对象,会发出miao的声音
//      Animal animal=new Animal(); 但是这句又是什么意思,有一个animal对象,会发出XX的声音
        //有时候我们不行希望Animal被实例化,就把Animal声明abstract抽象类,无法被实例化,只能被继承的子类实例化
        cat.setName("cat");
        cat.sound();
    }
}
package 学习;

 public class Animal {
    public String name;
    public void sound(){
    }

     public void setName(String name) {
         this.name = name;
     }

     public String getName() {
         return name;
     }
 }

抽象类只能由继承的子类来实例化,或者继承的子类继续声明为抽象的

package 学习;

 abstract public class Animal {
    public String name;
    public abstract void sound();//抽象方法

     public void setName(String name) {
         this.name = name;
     }//普通方法

     public String getName() {
         return name;
     }//普通方法
 }

抽象类里可以把包含普通方法和抽象方法,抽象方法就是没有{},没有具体的实现,由继承的子类实现重写方法
但是含有抽象方法的类必须为抽象类
一句话:含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法,也可能是普通方法

这时候我们再声明一个Lion类

package 学习;

public class Lion extends Animal{
    @Override
    public void sound() {
        System.out.println("huhuhu");
    }
    
}

这样Animal下有Lion和cat类,我们可以再添加Dog类,Bird类,然后你会发现,除了Lion,其他都可以作为宠物,宠物含有有Pet这方法,就是可以被抚摸,我们想给除了Lion加上这个方法,有三种办法

  1. 把pet普通方法加入Animal,但是Lion就有了这个方法,但显然这个不是希望被Lion拥有
  2. pet方法设置抽象的加到animal里面,但是这每个子类都必须重写,很麻烦
  3. 有没有一种可能让除了lion的子类继承自一个新的Pet类,但是java不允许继承

记住:单继承多接口
interface

package 学习;

public interface Pet {
    public void pet();
}

package 学习;

**public class Cat extends Animal implements Pet**{
    @Override
    public void sound() {
        System.out.println("miao");
    }

    public static void main(String[] args) {
        Cat cat = new Cat();//有一个cat对象,会发出miao的声音
//      Animal animal=new Animal(); 但是这句又是什么意思,有一个animal对象,会发出XX的声音
        //有时候我们不行希望Animal被实例化,就把Animal声明abstract抽象类,无法被实例化,只能被继承的子类实例化
        cat.setName("cat");
        cat.sound();
    }

    **@Override
    public void pet() {
        System.out.println("miaomiao");
    }
}**

这样就只在需要pet方法的类加上这个接口,然后重写就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值