zoukankan      html  css  js  c++  java
  • 抽象类和接口

    转载:https://blog.csdn.net/qq_37766026/article/details/90702387

     https://www.jianshu.com/p/93d701282bd9

    一、抽象类

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。

    1.抽象方法:使用abstract修饰且没有方法体的方法。

    特点:

    ① 抽象方法没有方法体,交给子类实现

    ② 抽象方法修饰符不能是private final static(如果是private则子类无法访问,final则子类无法继承,static是类就可以使用,但抽象方法是在子类实现后才可用)

    ③ 抽象方法必须定义在抽象类或者接口中

    2.抽象类:包含抽象方法的类,即使用abstract修饰的类。

    特点:

    ① 抽象类不能被实例化,只能被继承

    ② 抽象类中可以不包含抽象方法(不包含抽象方法就没有太大意义,可以作为工具类防止被实例化)

    ③ 抽象类的子类可以不实现该类所有的抽象方法,但也必须作为抽象类(抽象派生类)

    ④ 抽象类的构造方法不能定义成私有(子类构造方法会调用父类构造方法)

    ⑤ 抽象类不能使用final修饰,final修饰的类不能被继承

    public class Test3 {
        public static void main(String[] args) {
            Gun gun = new Gun("机关枪");
            Grenade grenade = new Grenade("手榴弹");
            gun.attack();
            grenade.attack();
            gun.how2Attack();
            grenade.how2Attack();
        }
    }
     
    abstract class Weapon{
        String name;
        public void attack(){
            System.out.println(name+"具有攻击行为");
        }
     
        abstract void how2Attack();
     
    }
    class Gun extends Weapon{
        public Gun(String name) {
            this.name = name;
        }
     
        @Override
        void how2Attack() {
            System.out.println(name+"射击敌人");
        }
    }
    class Grenade extends Weapon{
        public Grenade(String name){
            this.name = name;
        }
        @Override
        void how2Attack() {
            System.out.println(name+"丢向敌人");
        }
    }
    View Code

    二 、Java中的接口:在JAVA编程语言中是接口一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

    特点:

    ① 接口中没有构造器,不能被实例化

    ② 接口只能继承接口,不能继承类,接口支持多继承

    ③ 接口中的定义的成员变量,默认是public static final修饰的静态常量

    ④ 接口中定义的方法,默认是public abstract修饰的抽象方法

    ⑤ 接口中定义的内部类,默认是public static修饰的静态内部类

    (1)Java中抽象类和接口中有构造方法吗?

    ①在接口中 不可以有构造方法

    在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。

    A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需修改。接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,

    B. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序

    C. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。

    抽象类中不一定有抽象方法,抽象方法一定存在于抽象类中。

    继承抽象类的可以是普通类,但必须重写抽象类中的所有抽象方法,也可以是抽象类,无需重写抽象类中的所有抽象方法。

  • 相关阅读:
    Welcome to Swift (苹果官方Swift文档初译与注解十一)---70~76页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解十)---63~69页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解九)---58~62页(第二章)
    Welcome to Swift (苹果官方Swift文档初译与注解六)---35~44页 (第一章完)
    CSS3如何实现2D转换和3D转换,他们有何区别
    表格列布局系列如何灵活把握列宽
    如何将多行数据以分组的形式对齐到单元格的上,中或下位置
    媒体查询的应用以及在css3中的变革
    样式表优先级顺序
    创建热点区域
  • 原文地址:https://www.cnblogs.com/jingRegina/p/11635997.html
Copyright © 2011-2022 走看看