1.抽象类

1.1 abstract修饰类:抽象类

  • 不可被实例化
  • 抽象类有构造器 (凡是类都有构造器)
  • 抽象方法所在的类,一定是抽象类
  • 抽象类中可以没有抽象方法

1.2 abstract修饰方法:抽象方法

  • 格式:没有方法体,包括{}.如:public abstract void eat();
  • 抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
  • 若子类继承抽象类,并重写了所有的抽象方法,则此类是一个"实体类",即可以实例化
  • 若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍有抽象方法,则此类必须声明为抽象的!
package com.practise;

/**
 * 抽象类
 *
 * @author yyx 2019年3月4日
 */
public class AbstractPractise {

    public static void main(String[] args) {
        Student stu = new Student();
        /*
         * 报错 Person person=new Person();
         */
        new Person() { // 匿名类

            @Override
            void sayWord() {
                System.out.println("我是一个匿名类");
            }
        }.sayWord();
        stu.sayWord();
    }
}

abstract class Person {
    abstract void sayWord();

    public void readBook() {
        System.out.println("人会读书");
    }

    public Person() {
        System.out.println("抽象类有构造器,不能new实例化,但子类创建对象时我会先创建实例");
    }
}

class Student extends Person {

    @Override
    void sayWord() {
        System.out.println("我是人的子类,我会讲话");
    }

}

     注意:abstract 不能用来修饰属性、构造器、private、final、static

2.接口

     接口(interface) 是与类并行的一个概念

  • 接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,不能包含变量、一般的方法
  • 接口是没有构造器的
  • 接口定义的就是一种功能。此功能可以被类所实现(implements)
  • 实现接口的类,必须要重写其中的所有的抽象方法,方可实例化。若没有重写所有的抽象方法,则此类仍为一个抽象类
  • 类可以实现多个接口。----java 中的类的继承是单继承的
  • 接口与接口之间也是继承的关系,而且可以实现多继承
package com.practise;

/**
 * 接口
 *
 * @author yyx 2019年3月4日
 */
public class InterfacePractise {

    public static void main(String[] args) {
        CC cPerson = new Person();
        DD dPerson = new Person();
        print(cPerson);
        printSpeak(dPerson);
        System.out.println(CC.age);
    }

    public static void print(CC c) {
        c.walk();
        c.eat();
        c.study();
    }

    public static void printSpeak(DD d) {
        d.speak();
    }
}

interface AA {
    void walk();
}

interface BB {
    void eat();
}

interface DD {
    void speak();
}

/**
 * 接口支持多继承
 * @author yyx
 * 2019年3月4日
 */
interface CC extends AA, BB {
    //常量,接口中不推荐使用
    static final int age = 22;

    void study();
}

class Person implements CC, DD {

    @Override
    public void walk() {
        System.out.println("人会走路");
    }

    @Override
    public void eat() {
        System.out.println("人会吃饭");
    }

    @Override
    public void study() {
        System.out.println("人会学习");
    }

    @Override
    public void speak() {
        System.out.println("人会说话");
    }

    public void swim() {
        System.out.println("人会游泳");
    }

}

Java基础(basis)-----抽象类和接口详解的更多相关文章

  1. Java基础之抽象类与接口

    Java基础之抽象类与接口 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候 ...

  2. 《Java基础——break与continue用法详解》

    Java基础--break与continue用法详解       1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...

  3. java抽象类和接口详解

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

  4. java基础(四)-----抽象类与接口

    抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...

  5. Java基础篇(JVM)——字节码详解

    这是Java基础篇(JVM)的第一篇文章,本来想先说说Java类加载机制的,后来想想,JVM的作用是加载编译器编译好的字节码,并解释成机器码,那么首先应该了解字节码,然后再谈加载字节码的类加载机制似乎 ...

  6. 程序猿的日常——Java基础之抽象类与接口、枚举、泛型

    再次回顾这些基础内容,发现自己理解的又多了一点.对于一些之前很模糊的概念,渐渐的清晰起来. 抽象类与接口 抽象类通常是描述一些对象的通用方法和属性,并且默认实现一些功能,它不能被实例化.接口仅仅是描述 ...

  7. java基础之抽象类与接口的区别

    在学习java的过程中,或者是在找工作笔试或面试的时候,如果你是java岗位,那么抽象类与接口的区别无疑是一个大热点,是各大公司都想要考的一个小知识点,下面是我为了9月份秋招自己总结的,若有不对的地方 ...

  8. java基础之抽象类与接口的形式参数和返回值

    抽象类与接口形式参数和返回值问题 1.形参问题 /* 1.形式参数: 基本类型(太简单,不是我今天要讲解的) 引用类型 (1)类名:(匿名对象的时候其实我们已经讲过了) 需要的是该类的对象 (2)抽象 ...

  9. [java基础] 002 - 位运算符的详解和妙用

    一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...

随机推荐

  1. LeetCode 589 N-ary Tree Preorder Traversal 解题报告

    题目要求 Given an n-ary tree, return the preorder traversal of its nodes' values. 题目分析及思路 题目给出一棵N叉树,要求返回 ...

  2. 《Nginx - 指令》- Rewrite/If/Set

    一:Rewrite - 概述 - flag 作用 - last / break 实现对 Url 的重写. - redirect / permanent 实现对 Url 的重定向. - 使用范围 - s ...

  3. js 进制之间的转换

    //十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...

  4. Code once, debug everywhere.

    1.通常语言调用一个函数会出exception的情况,在javascript里面返回的是undefined.等到程序运行不正常的时候,你看到数据结构的有些地方为什么是undefined,只能哭了. 2 ...

  5. 汇编-5.0-[BX]和loop指令

    1.要完整的描述一个内存单元,需要两种信息:1.内存单元的地址:2.内存单元的长度(类型). 2."()"表示一个寄存器或一个内存单元中的内容.如:(ax)表示ax中的内容. &q ...

  6. 第四节:Linux下如何解决冲突

    当出现冲突,我们push的时候,会出现: 然后pull,下拉到本地: 查看冲突: 然后进入冲突文件: 修改为: 保存退出. 提交:

  7. git branch 命令查看分支、删除远程分支、本地分支

    git branch 命令操作 1.查看本地分支 : git branch 前面带有*号的是当前分支 2 .删除本地分支: git branch -d [branchname] 提示删除了一个名为li ...

  8. vue 后退不刷新页面

    使用 this.$router.push({path: '/aichat'})路由跳转方式跳转页面 要实现 home => chat  chat页面刷新: chat => report, ...

  9. 遮罩层出现后不能滚动 添加事件@touchmove.prevent

    <div class="maskshow" @click="hidden_video" @touchmove.prevent></div> ...

  10. mysql 分组 列转行

    SELECT aa.type,CONCAT('(',GROUP_CONCAT('\'',aa.user_id separator '\'\,'),'\')') FROM (select  aa.typ ...