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. ORACLE UNDO

    UNDO 数据操纵 数据操纵语言(DML)由以下SQL语句组成: INSERT,DELETE,UPDATE,MERGE DML始终作为事务处理的一部分执行,它可以: 使用Rollback命令执行回退 ...

  2. scrapy windows下出现importError:No module named 'win32api'

    scrapy windows下出现importError:No module named 'win32api'需安装 pip install pypiwin32

  3. oracle中in和exists的区别

    IN适合于外表大而内表小的情况:EXISTS适合于外表小而内表大的情况. 性能上的比较 比如Select * from T1 where x in ( select y from T2 ) 执行的过程 ...

  4. ubuntu上设备树的编译

    由DTS文件生成DTB 文件,DTB是U-BOOT用来传递给LINUX内核的参数的一种文件形式. DTB:device tree blob 1,在内核中寻找:arch/arm/boot/dts/dig ...

  5. 移动端rem布局(阿里)

    该方案使用相当简单,把下面这段已压缩过的 原生JS(源码已在文章底部更新,2017/5/3) 放到 HTML 的 head 标签中即可(注:不要手动设置viewport,该方案自动帮你设置) < ...

  6. 006-docker-安装-nginx

    1.搜索镜像 docker search nginx 2.拉取合适镜像 docker pull nginx docker images 3.使用镜像 docker run -p 8080:80 --n ...

  7. IE无法安装Activex控件

    由于无法验证发行者,所以windows已经阻止此软件,如要安装未签名的activex控件,按如下步骤: 1.打开Internet Explorer---菜单栏点“工具”---Internet选项--安 ...

  8. 万恶之源 - Python包的应用

    包的简介 你们听到的包,可不是女同胞疯狂喜欢的那个包,我们来看看这个是啥包 官方解释: Packages are a way of structuring Python’s module namesp ...

  9. [py][mx]django处理登录逻辑

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  10. js中的offsetLeft和style.left

    (1)style.left是带单位"px"的,而offsetLeft没有单位,另外,style.left必须是内联样式,或者在JS中通过style.left赋值,否则取得的将为空字 ...