Java学习笔记——抽象类与接口(基础)

抽象类描述的是一个抽象的概念,这个类并没有包括足够的信息来描绘对象。比如动物类,只有动物的通用属性和行为描述等。

抽象类作为最基础的类,包含一些通用的基本成员属性和成员方法。在抽象类中甚至可以只给出方法的定义而不实现,具体实现由继承的子类来完成,这些方法也被称为抽象方法。

Java提供了abstract关键字来定义一个抽象类或抽象方法,定义格式如下:

[访问权限修饰符] abstract class[类名]

eg:
//抽象类Animal
abstract class Animal{
    public String name;
    public String color;

    abstract void eat();
    }
    //子类Dog
class Dog extends Animal{
    @Override//注解 重写父类方法
    public void eat()
    {
        System.out.println("小狗爱吃骨头");
    }
}
    //子类Cat
class Cat extends Animal
{
    @Override
    public void eat()
    {
        System.out.println("小猫爱吃鱼");
    }
}
public class Abstract{
    public static void main(String[] args)
    {
        Animal cat = new Cat();
        Animal dog = new Dog();
        cat.eat();
        dog.eat();
    }
}
//子类必须重写父类的所有抽象方法,错误如下,没有重写eat方法
public class Dog extends Animal{
    @Override
    public void noteat{}
}

 如果继承抽象类的子类也是抽象类,该子类可以不实现父类中的所有抽象方法。但是,该抽象子类的实现类必须实现抽象父类与子类的所有抽象方法。示例如下:

//抽象父类
abstract class ParentClass{
    //抽象父类的抽象方法
    public abstract void ParentMethod();
}
//抽象子类
abstract class ChildClass extends ParentClass{
    //抽象子类的抽象方法
    public abstract void ChildMethod();
}
//具体实现抽象类
class Person extends ChildClass
{
    //重写父类的抽象方法    
    @Override
    public void ParentMethod()
    {
        System.out.println("这是父类方法");
    }
    @Override
    public void ChildMethod()
    {
        System.out.println("这是子类方法");
    }
}
public class Abstract{
    public static void main(String[] args)
    {
        Person person = new Person();
        person.ParentMethod();
        person.ChildMethod();
    }
}

 接口是一种更抽象的,其定义的方法不允许实现方法(没有方法体,只是定义了方法入参,方法名和返回值类型),且没有任何与接口相关的存储。接口的子类也不称为继承,而是称为实现类。示例如下:

//注意,是用interface而不是class
interface AnimalService{
    public void sleep();
}
//简单示例
//定义一个动物接口(AnimalService)
interface AnimalService{
    public void sleep();
}
//注意,用implements而不是extends
class AnimalServiceImpl implements AnimalService{
    @Override
    public void sleep()
    {
        System.out.println("实现动物接口");
    }
}
public class Abstract{
    public static void main(String[] args)
    {
        AnimalService animalService = new AnimalServiceImpl();
        animalService.sleep();
    }
}
/*-------------------------------------------------------------*/
//多重继承,一个类同时实现多个接口

interface AnimalService{
    public void sleep();
}
interface CatService{
    public void playBall();
}
class Cat implements CatService,AnimalService{
    @Override
    public void sleep()
    {
        System.out.println("小猫睡觉");
    }
    @Override
    public void playBall()
    {
        System.out.println("小猫玩球");
    }
}
public class Abstract{
    public static void main(String[] args)
        {
            Cat cat = new Cat();
            cat.sleep();
            cat.playBall();
        }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值