菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
154
0

抽象类和接口

原创
05/13 14:22
阅读数 54029

抽象类和接口

抽象类abstract

abstract抽象类,抽象类不能实例化,他只是一个约束后面可以理解为会有人帮我们实现具体的功能。抽象类里可以有抽象类也可以有普通方法,但是普通类内不能存在抽象方法。

  1. 不能new这个抽象类,只能靠子类去实现它:约束!
  2. 抽象类中可以写普通方法
  3. 抽象方法只能在抽象类中

eg:

//父类:
package shiyan;

public abstract class Abstract {
    public Abstract(){
        System.out.println("Abstract的构造器");
    }
    public static void go(){
        System.out.println("Abstract的普通方法");
    }

    public abstract void run();//仅仅约束,证明有这个方法方法没有实现的方法体

    public static void main(String[] args) {

    }
}



//子类:

package shiyan;

public class  Son extends Abstract {//继承
    @Override
    public void run() { //实现方法
        System.out.println("子类实现父类的抽象方法");
    }

       public Son()
       {
           System.out.println("StaticStatement的构造器");
       }


    public static void main(String[] args) {
    Son s1=new Son();
        s1.run();//抽象方法,实现体已写
        s1.go();//继承自抽象类的普通方法
    }
}

主要还是为了提高效率减少重复的代码,对于可以直接使用的用普通方法可以直接继承使用,对于有变化的可以使用抽象方法每次重新写出实现。

接口

接口类似于抽象类,不能被实例化,没有构造方法,只能通过类来实现它。

定义语法:

public interface 接口名 { }

**实现类语法: **

public class 类名 implements 接口名1,接口名2...{

实现接口方法体

}

特点:

  1. 只是一个内部有方法名的抽象个体,没有方法的实现。

写一个方法void run(); 其默认属性为public abstract void run();

  1. 定义的变量默认为常量 如int age=2; 默认为 public static final int age=2;

    public static final自动省略。

  2. 一个类可以实现多个接口,利用 implements关键字实现。

  3. 必须重写接口中的方法。

  4. 在java1.8中接口的静态方法不能被它的实现类继承

接口内部允许存在静态方法,且静态方法需要写方法体。在这个接口的实现类中也不强制要求重写这个静态方法,也可以选择重写。未重写时:在接口的实现类中可以使用 接口名.方法名 访问这个方法,但是不能使用该类的实例化对象访问,重写后:使用接口名.方法名访问的是未重写的方法,使用实现类的对象访问的是重写后的方法。

//学生的接口定义
package Interface;

public interface Student {
  int age=20;  //常量定义
  void study();//抽象方法定义,无实现,public abstract自动省去
    public  abstract void run();
    public static void go(){//不被实现类继承,无法调用
        System.out.println("静态方法在interface里要有方法体");
    }
}


//老师的接口定义
package Interface;

public interface Teacher {
    int age=44;
    void teach();
}

//实现类
package Interface;

public class BodyIpil implements Student,Teacher{
    @Override
    public void study() {
        System.out.println("学生接口的学习");
    }

    @Override
    public void run() {
        System.out.println("学生接口的跑");
    }

    @Override
    public void teach() {
        System.out.println("老师接口的教学");
    }

    public static void main(String[] args) {
      //  Student.age=2; 常量不能再被修改
        int age= Student.age;
        int age2= Teacher.age;//可以复制给响应的变量
        BodyIpil body01=new BodyIpil();
        body01.run();
        body01.teach();
        body01.study();
       // body01.go();不能继承go();
    }
}


发表评论

0/200
154 点赞
0 评论
收藏