学习笔记: 抽象类和接口

学习内容:抽象类和接口

1. 抽象类(半抽象)

什么是抽象类?类和类之间有共同特征,将这些共同特征提取出来,就形成了抽象类。

1、抽象类属于引用数据类型。其定义的语法是:

[修饰符列表] abstract class 类名{
		类体;
}

2、抽象类半抽象的,是无法实例化的,无法创建对象的,使用抽象类是用来被子类继承的。
3、finalabstract不能联合使用,这两个关键字是对立的。
4、抽象类的子类可以是抽象类。
5、抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
6、抽象类关联到一个概念:抽象方法。什么是抽象方法呢?**抽象方法表示没有实现的方法,没有方法体的方法。例:public abstract void dosome();
抽象方法的特点:(1)没有方法体,以分号结尾。 (2)前面修饰符列表中有abstract关键字。
7、抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中
8、一个非抽象类继承抽象类,必须将抽象类中的抽象方法重写(实现)。
例:

public class Test01 {
    public static void main(String[] args) {
    	//注:因为Animal是抽象类,所以不能new对象。
        Animal animal=new Cat();//多态,父类型引用指向子类型对象,
        animal.dosome();
        animal.remove();
    }
}

abstract class Animal{
    public Animal() {}//无参构造是给子类创建对象用的
    public abstract void dosome();//静态方法
    public void remove(){
        System.out.println("Animal在移动");
    }
}

abstract class Bird extends Animal{//抽象类Bird继承抽象类Animal
    
}

class Cat extends Animal{//非抽象类Cat继承抽象类Animal
	public class Cat(){
		//这里默认会有一个super();用来调用父类的构造方法
}
    public void dosome(){//重写抽象类中的抽象方法
        System.out.println("猫在睡懒觉!");
    }
    public void remove(){
        System.out.println("猫在走猫步");
    }
}

在这里插入图片描述

2. 接口(完全抽象)

1、接口也是一种引用数据类型。
2、接口是完全抽象的。或者也可以说接口是特殊的抽象类
3、接口的定义语法:

[修饰符列表] interface 接口名{
}

4、接口支持多继承,一个接口可以继承多个接口。
5、接口中只包含两部分内容:常量和抽象方法。
6、接口中所有的元素都是public修饰的(公开的)。
7、接口中的抽象方法定义时:public abstract修饰符可以省略。
8、接口中的方法都是抽象方法,所以接口中的方法不能有方法体。
9、接口中的常量的public static final可以省略。
10、类和类(接口和接口)之间叫做继承extends,类和接口之间叫做实现implements。(仍然可以将实现看成继承)
11、一个类可以实现多个接口。一个非抽象的类,实现接口的时候,必须将接口中所有方法加以实现。
12、当extendsimplements同时出现时,extends在前,implements在后。
13、使用接口写代码的时候,可以使用多态(父类型引用指向子类型对象)。
例:

public class Test01 {
    public static void main(String[] args) {
            Clothes c=new Cat();//多态
            c.chibang();
            c.wear();
            c.take();
            if(c instanceof Cat){//判断引用c是否是一个Cat对象
                Cat b=(Cat) c;//向下转型
                b.dosome();
            }
    }
}

interface Fly{
    void chibang();//抽象方法前的public abstract被省略
}

interface Arms{
    void take();//抽象方法前的public abstract被省略
}

interface Clothes extends Fly,Arms{//接口之间的多继承
    void wear();//抽象方法前的public abstract被省略
}

class Animal{
    public void dosome(){
        System.out.println("Animal在忙");
    }
}

class Cat extends Animal implements Clothes{//非抽象Cat同时继承类和接口
    @Override
    public void chibang() {//非抽象类Cat重写Fly接口中的抽象方法
        System.out.println("猫插上了翅膀");
    }

    @Override
    public void take() {//非抽象类Cat重写Arms接口中的抽象方法
        System.out.println("猫拿起了武器");
    }

    @Override
    public void wear() {//非抽象类Cat重写Clothes接口中的抽象方法
        System.out.println("猫穿上了盔甲");
    }

    @Override
    public void dosome() {
        System.out.println("猫在打小怪兽");
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值