Java中的面向对象(二)抽象类与接口

抽象类和接口

搭配多态使用的重要语法特性

抽象类

Java中使用abstract关键字来描述抽象类和抽象方法

abstract关键字存在的意义,就是让程序员明确的告诉编译器,这个类就是一个抽象的类,不应该进行实例化,于是编译器就要做好相关的检查工作

抽象类本身就是用来表示一个不太具体的概念

抽象方法,就更不具体,里面甚至没有实质的实现

//抽象类,
//如果尝试创建抽象类的实例,就会编译报错
abstract public class Text {
    //给方法前头加上abstract,此时这就是一个抽象方法
    //抽象方法不需要方法体
    //抽象方法只能在抽象类中存在(也可以在接口中存在),但不可以在普通类中存在
    //抽象方法的意义就是让子类进行重写
    abstract public void run();
    }
除了不能实例化之外,其他的语法规则都和普通类一样
1.抽象类中也可以有普通的属性和方法
2.抽象类也可以有静态的属性和方法
3.抽象类也可以继承其他的类,还可以被其他的类继承

接口

接口是抽象类的更进一步(比抽象类还抽象)

抽象类只是不能实例化,但是其他各个方面都和普通的类差不多

而接口不光不能实例化,同时也不具备类的各种特性

接口中也可以放抽象方法,这里的抽象方法不必写abstract关键字(写或者不写都是抽象方法)

接口中不能放普通的方法、

接口中也不能放普通的属性

只能放public static final修饰的属性

接口不能继承自其它的类,但是可以继承自其他的接口

接口不能被类继承,而是被其他类“实现”,

某个类,实现(implements)了这个接口

与抽象类的对比:

  • 抽象类和普通的类差不多,只是不能实例化,而接口和普通的类之间相去甚远,(包含的属性,和其他类的关系)
  • 一个类只能继承自一个抽象类,但是一个类可以同时实现多个接口

接口存在的意义:

解决Java中不能多继承的问题 

Java中的继承是单继承,有些场景下多继承是有用的,Java中可以通过继承一个类,实现多个接口的方式来完成类似于多继承的效果、

接口相当于一种约束,要求了实现该接口的类 ,必须重写所有的接口中的抽象方法

package Text;

abstract  public class Animal {
    public String name;
    public Animal(String name){
        this.name = name;
    }
}
package Text;

public interface IRunning {
    void run();
}
package Text;

public class Cat extends Animal implements IRunning {
    public Cat(String name){
        super(name);
    }
    @Override
    public void run(){
        System.out.println(name + "正在跑");
    }
}
package Text;

public class Text1 {
    public static void main(String[] args) {
        Cat cat = new Cat("yys");
        cat.run();
    }
}
//输出结果:yys正在跑


接口是一个非常有用的语法机制,如果所有代码都是一个人完成,此时接口的意义就不大了。

若这个代码需要很多人协同开发,此时接口就非常具有意义

每个人需要负责一部分模块,模块和模块之间往往需要一些相互调用,例如:模块A需要给模块B提供一些类/方法进行使用,实现A模块的程序员就可以和实现B模块的程序员约定UI系列的interface(接口在创建时应:new---Javaclass--interface)

此时调用者就按照interface中约定的接口来去编写调用的代码,实现者在提供一些类来完成interface的实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值