目录
创新互联是专业的零陵网站建设公司,零陵接单;提供成都网站建设、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行零陵网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!前言:
1.抽象类
1.1抽象类的概念及语法
1.2 抽象类的特征
1.3抽象类的特性
2.接口
2.1接口的概念及语法
2.2接口的使用及特性
2.2.1接口的使用
2.2.2接口的特性
2.3实现多个接口
2.4接口的继承
3.抽象类与接口的区别
结束语:
前言:
上一次小编讲解了继承、组合和多态,这次小编和大家分享一下抽象类与接口的知识点。
1.抽象类 1.1抽象类的概念及语法在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果这个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。
1.2 抽象类的特征关键字:abstract
通过abstract修饰的类就叫抽象类,通过abstract修饰的方法叫抽象方法。
代码如下所示:
package demo1;
//抽象类Test
public abstract class Test {
    public int a;//成员变量
    public void func1(){
        //普通方法
    }
    abstract public void func2();//抽象方法
}注意:
- 被abstract修饰的方法不能有方法体。
- 抽象方法也是类,也可以有类的一般属性,可以有普通方法和属性,甚至构造方法。
①抽象类不能直接实例化对象。

②抽象方法不被private、final和static修饰,因为被abstract修饰的方法需要在子类中重写,被修饰之后就不能重写了。

③抽象类必须要被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用abstract修饰。
代码如下所示:
package demo1;
abstract class Shape{
   abstract public void draw();
   abstract void calcArea();
}
class Rect extends Shape{
    private double length;
    private double width;
    public Rect(double length, double width) {
        this.length = length;
        this.width = width;
    }
    @Override
    //该注释可以帮助我们检查重写代码的格式是否正确
    public void draw() {
        //子类必须重写父类的abstract修饰的方法
        System.out.println("矩形为:length=" + length + " width=" + width);
    }
    @Override
    void calcArea() {
        //子类必须重写父类的abstract修饰的方法
        System.out.println("矩形的面积为:" + length * width);
    }
}
public class Test2 {
    public static void main(String[] args) {
        Rect rect = new Rect(12,23);
        rect.draw();
        rect.calcArea();
    }
}结果如下所示:

④抽象类中不一定包含抽象方法,但包含抽象的方法的类必须是抽象类。


⑥抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量。
代码如下所示:
package demo1;
abstract class A{
    public int a;
    public int b;
    abstract public void func();
    public A(int a, int b) {
        this.a = a;
        this.b = b;
    }
}
class B extends A{
    public B(int a, int b) {
        super(a, b);
        //先帮助父类构造
    }
    @Override
    public void func() {
        System.out.println("对父类被abstract修饰的方法进行重写!");
    }
}
public class Test3 {
    public static void main(String[] args) {
        B b = new B(1,2);
        b.func();
    }
}结果如下所示:

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在java中,接口也可以看做是:多个类的公共规范,是一种引用数据类型。
关键字:interface。
代码如下所示:
interface IUsb{
    //一个接口的定义
    void func();
}注意:
- 创建接口时,接口的命名一般以大写字母I开头。
- 接口命名时一般使用“形容词”词性的单词。
- 阿里编码规范中约定,接口中的方法和属性不要加任何修饰符号,保持代码的简洁性。
接口不可以直接使用,必须要有一个“实现类”来“实现”该接口,实现接口中的所有抽象方法。
关键字:implements
代码如下所示:
package demo2;
public class Test2 implements IUsb{
    @Override
    public void func() {
        //实现接口中的所有抽象方法
    }
}注意:子类和父类直接是extends继承关系,类与接口之间是implements实现关系。
2.2.2接口的特性①接口类型是一种引用类型,但是不能直接new接口的对象。

②接口中的每一个方法都是public的抽象方法,即接口中的方法会被隐式指定为public abstract(只能是public abstract,其他修饰符都会报错)。
interface B{
    void func1();
    public abstract void func2();
    //其中func1和func2之前的修饰符都是一样的。
}③接口中的方法是不能在接口中实现的,只能由实现接口的类来实现。
package demo2;
interface C{
    public abstract void func();
    //不可以在接口中实现该方法,而是应该在实现类中实现该方法!!!
//    public abstract void func2(){
//        System.out.println("接口中实现方法体!");
//    }
}
public class Test5 implements C{
    @Override
    public void func() {
        System.out.println("在实现类中实现!");
    }
}④重写接口中方法时,不能使用默认的访问权限。
package demo2;
interface D{
    void func();
}
public class Test6 implements D {
    @Override
    void func() {
        System.out.println("不可以使用默认的访问权限!!!");
    }
//    @Override
//    public void func() {
//        System.out.println("使用public修饰的!!!");
//    }
}⑤接口中可以含有变量,但是接口中的变量会被隐式的指定为public static final变量。
interface E{
    public static final int a = 10;//必须要给定默认值
    double b = 1.2;//默认是被public static final修饰的。
}⑥接口中不能有静态代码块和构造方法。
interface F{
//    static {
//        //不能有静态代码块
//    }
    int a = 10;
    int b = 20;
    //不可以有构造代码块
//    public F(int a, int b) {
//        this.a = a;
//        this.b = b;
//    }
}⑦接口虽然不是类,但是接口编译完成后字节码文件后缀格式也是.class。
⑧如果类没有实现接口中的所有的抽象方法,则该类必须设置为抽象类。
package demo2;
interface G{
    void func1();
    void func2();
    //如果类没有实现接口中的所有的抽象方法,则该类必须设置为抽象类。
}
public abstract class Test9 implements G{
    @Override
    public void func1() {
        //只实现一个抽象方法,则该类必须置为abstract
    }
}⑨JDK8中:接口中还可以包含default方法。
interface H{
    //default void func3();在JDK8中可以。
}在Java中,类和类之间是单继承的,一个类只能有一个父类,即Java中不支持多继承,但是一个类可以实现多个接口。
代码如下所示:
package demo3;
interface IEat{
    void eat();
}
interface IRunning{
    void run();
}
public class Animal {
    public String name;
    public int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
class Cat extends Animal implements IEat,IRunning{
    //先继承,再实现。继承只能继承一个,实现可以实现多个接口
    public Cat(String name, int age) {
        super(name, age);
    }
    @Override
    public void eat() {
        System.out.println(name + "正在吃饭!");
    }
    @Override
    public void run() {
        System.out.println(name + "正在跑!");
    }
    public static void main(String[] args) {
        Cat cat = new Cat("咪咪",12);
        cat.eat();
        cat.run();
    }
}结果如下所示:
注意:一个实现类实现多个接口的时候,每一个接口中的抽象方法都要实现,否则该类必须设置为抽象类。
2.4接口的继承在java中,类和类之间是单继承,一个类可以实现多个接口,接口与接口之间可以多继承,即用接口可以达到多继承的目的。
关键字;extends。
代码如下所示:
package demo4;
interface IRunning{
    void run();
}
interface ISwimming{
    void swimming();
}
interface IFly extends IRunning,ISwimming{
    //实现了接口间的多继承
    void fly();
}
public class Animal {
    public String name;
    public int age;
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
class Duck extends Animal implements IFly{
    public Duck(String name, int age) {
        super(name, age);
    }
    @Override
    public void run() {
        System.out.println(name + "正在跑!");
    }
    @Override
    public void swimming() {
        System.out.println(name + "正在游泳!");
    }
    @Override
    public void fly() {
        System.out.println(name + "正在飞");
    }
    public static void main(String[] args) {
        Duck duck = new Duck("阿飞",13);
        duck.fly();
        duck.run();
        duck.swimming();
    }
}结果如下所示:
抽象类:
- 是对一个事物在抽象。
- 可以继承一个普通类。
- 可以继承一个抽象类。
- 可以继承一个普通类/抽象类同时实现多个接口。
接口:
- 是对一个行为或者规范在设定标准。
- 可以通过extends拓展多个接口的功能。
这次小编主要和大家分享了抽象类和接口的一些简单知识点,至于具体的应用后期小编还会继续出的,敬请期待,希望对大家有所帮助,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享题目:抽象类与接口(Java系列6)-创新互联
分享链接:http://www.scyingshan.cn/article/cdphjo.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 