专栏首页A2DataJava-抽象类&接口

Java-抽象类&接口

4.5、抽象类

abstract: 关键字,用于修饰方法和类 抽象方法: 不同类的方法是相似的,但是具体内容又不太一样,所以我们智能抽取它的申明,没有具体的方法体,没有具体方法体的方法就是抽象方法 抽象类: 有抽象方法的类必须是抽象类 特点:

  • 抽象方法只能在抽象类里边
  • 抽象类和抽象方法必须被abstract修饰
  • 抽象类不能创建对象(不能实例化)
  • 抽象类中可以有非抽象的方法
  • 抽象类和类的关系也是继承

抽象类的成员特点

  • 成员变量
    • 可以有成员变量
    • 可以有常量
  • 成员方法
    • 可以有抽象方法
    • 可以有非抽象方法
  • 构造方法
    • 可以有构造方法的,需要对抽象类的成员变量进行初始化

    注意: 一个类继承了抽象类需要重写他所有的抽象方法,否则这个类就得是抽象类

package com.a2data;

import sun.plugin2.message.JavaReplyMessage;

/**
 * Created by JackFeng on 2020/3/15.
 */


/*
*
* 普通教练,高级教练
*
*
* 共性:
*   属性  姓名 年龄 性别
*   行为  教学
*
* */

public class AbastractTest {
    public static void main(String[] args) {

        BasicTeacher bt = new BasicTeacher();
        bt.name = "小白教练";
        bt.teach();


        JobTeacher jt = new JobTeacher();
        jt.name = "小灰教练";
        jt.teach();


    }
}


abstract class  Teacher{
    String name; // 姓名
    int age; // 年龄
    String gender;

    public abstract void teach();

}

class BasicTeacher extends Teacher{

    @Override
    public void teach() {
        System.out.println(name + "讲基础内容");
    }
}


class JobTeacher extends Teacher{

    @Override
    public void teach() {
        System.out.println(name+ "讲高级实战内容");
    }
}

4.6、接口

interface: 接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,接口和类的关系是实现,implements 格式:

  • interface 接口名 {}

特点:

  • 只能有抽象方法
  • 只能有常量
  • 只能用 publie&abstract 方法
  • 默认使用public static final 来修饰成员变量
  • 建议 手动输入默认修饰符(public&abstract),虽然不输入也会是默认的。

注意:

  • 接口不能创建对象(不能实例化)
  • 类与接口的关系是实现关系,一个类实现一个接口必须实现它的所有方法

类与类:继承关系,单一继承,多层继承 类与接口:实现关系,多实现 接口与接口关系:继承关系,多层继承

接口优点:

  • 1、类与接口的关系,实现关系,而且是多实现,一个类可以实现多个接口,类与类之间是继承关系,java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性
  • 2、对外提供规则(统一要求,例如Use接口,充电器接口)
  • 3、降低程序的耦合性
    • 定义规则,模块化开发
    • 高内聚低耦合,提高开发效率

接口和抽象类的区别:

  • 共性:抽取出抽象的概念
  • 区别1:与类的关系
    • 类与接口是实现关系,多实现
    • 类与抽象类是继承关系,Java中的继承是单一继承,一个类只能有一个父类,java中的继承是多层继承
  • 区别2:成员
    • 抽象类有构造方法的
    • 接口没有构造方法
    • 抽象类可以有抽象方法,也有非抽象方法
    • 接口只能有抽象方法,默认修饰符 public abstract
    • 抽象类可以有成员变量,也可以有常量
    • 接口只能有常量
    • 成员变量:
    • 成员方法:
    • 构造方法:

接口开发的思路

分析: 由下至上 不断向上抽取 实现: 由上至下 先实现共性 应用: 使用具体的子类

package com.a2data;

/**
 * Created by JackFeng on 2020/3/15.
 */


/*
*
* 篮球运动员和教练
* 乒乓球运动员和教练
* 篮球运动员和教练要出国访问,需要学习英语
*
*
*
* */


public class InterfaceTest {
    public static void main(String[] args) {
        //篮球运动员对象
        BasketBallPlayer bp = new BasketBallPlayer();
        bp.name = "姚明";
        bp.age = 35;
        bp.gender = "男";
        bp.sleep();
        bp.study();
        bp.speak();
        System.out.println("------------");
        //乒乓球教练对象

        PingpangCoache pp = new PingpangCoache();
        pp.name = "刘教练";
        pp.age = 40;
        pp.gender = "男";
        pp.sleep();
        pp.teach();
//        pp.speak()

    }


}


class  Person{
    String name;
    int age;
    String gender;

    public Person() {
    }

    public Person(String name, int age, String gender) {
        // 成员变量初始化
        this.name = name;
        this.age = age;
        this.gender = gender;
    }


    public void eat(){
        System.out.println("吃饭");
    }


    public void sleep(){
        System.out.println("睡觉");
    }



}

interface SpeakEnglish {

    public abstract void speak();
}


// 运动员
abstract class Player extends Person{
    //学习
    public abstract void study();

}

// 教练

abstract class Coach extends Person{
    // 教
    public abstract void teach();

}


//篮球运动员

class BasketBallPlayer extends Player implements SpeakEnglish{

    @Override
    public void study() {
        System.out.println("学扣篮");
    }

    @Override
    public void speak() {
        System.out.println("说英语");
    }
}


//乒乓球运动员

class  PingpangPlayer extends Player{

    @Override
    public void study() {
        System.out.println("学颠球");
    }
}


//篮球教练

class BasketBallCoach extends Coach implements SpeakEnglish{

    @Override
    public void teach() {
        System.out.println("教扣篮");
    }

    @Override
    public void speak() {
        System.out.println("说英语");
    }
}


//乒乓球教练
class PingpangCoache extends  Coach{

    @Override
    public void teach() {
        System.out.println("教颠球");
    }
}

本文分享自微信公众号 - DataScience(DataScienceTeam),作者:体育僧

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Day1. 数据可视化-- 概述

    做为⼀名数据分析师,掌握可视化技能是必不可少的。大部分情况下,上级更关心呈现的结果。当可视化的结果呈现在你眼前时,你才能直观地体会到“数据之美”。图片在内容表达...

    DataScience
  • Java-面向对象(封装)

    A:属性 ---- 就是事物的描述信息 B:行为 ---- 事物能够做什么 类:一组相关属性和行为的集合 对象:就是该事物的具体体现

    DataScience
  • Java-函数

    方法重载:在同一个类中,出现了方法名相同 不能出现参数名以及参数条件一致的方法 特点:

    DataScience
  • 抽象类和接口的区别

    定义一个抽象类AbstractDoor,作为门的基类,同时定义一个alarmable的接口.(alarmable是我自己写的,我不知道有没有这个单词,大家懂就好...

    呼延十
  • 自定义Androidk全量更新组件

      自动更新功能对于一个APP来说是必备的功能,特别是对于未投放市场下载的APP,每次都让用户删掉原来的,再下载新的版本,肯定是不合适的。

    饮水思源为名
  • Android实现微博菜单弹出效果

    先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。

    砸漏
  • Android实现随意拖动View效果

    项目过程中要实现能在页面中随意的拖动,刚开始实现是用悬浮球的形式进行实现,因为之前项目中用过,实现后发现用户每次安装后,都有权限的限制,甚至有些用户关闭悬浮球权...

    SoullessCoder
  • Android实现图片选择器功能

    本文实例为大家分享了Android实现图片选择器功能的具体代码,供大家参考,具体内容如下

    砸漏
  • Android实现随意拖动View效果的实例代码

    项目过程中要实现能在页面中随意的拖动,刚开始实现是用悬浮球的形式进行实现,因为之前项目中用过,实现后发现用户每次安装后,都有权限的限制,甚至有些用户关闭悬浮球权...

    砸漏
  • 程序员该如何管理后宫:皇上选妃(代理模式)

    木东居士

扫码关注云+社区

领取腾讯云代金券