抽象类

2023-05-16

1.抽象类

概述:

​ 用来描述抽象概念的类,叫做抽象类。抽象类中的方法不一定有具体的实现。

package org.wdit;

/**
 * 抽象类
 */
public class unit08 {
    public static void main(String[] args) {
        Pets pets = new Dod();
        pets.voice();
        pets.eat();
        Pets pets1 = new Cat();
        pets1.voice();
        pets1.eat();
    }
}
abstract class Pets{

    public abstract void voice();

    //吃东西
    public abstract void eat();
}
//如果父类中有抽象方法,则·子类必须实现父类的抽象方法
class Dod extends Pets{

    @Override
    public void voice() {
        System.out.println("汪汪叫");

    }

    @Override
    public void eat() {
        System.out.println("狗吃肉");

    }
}
class Cat extends Pets{

    @Override
    public void voice() {
        System.out.println("喵喵叫");
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");

    }
}

特点:

​ 1.不能直接被创建对象,只能通过子类去创建。

​ 2.抽象类中不一定有抽象方法的类,有抽象方法的类一定是抽象类。

​ 3.被abstract关键字修饰

​ 4.抽象类可以被继承

​ 普通类:其子类必须重写抽象类中的抽象方法

​ 抽象类子类:可以不用重写抽象方法

成员特点:

​ 抽象类成员特点:

​ 成员变量: 可以是变量,也可以是final修饰的变量(常量),静态变量

​ 成员方法 : 可以是抽象方法,也可以是非抽象方法

​ 构造方法 : 有构造方法,但是不能被创建对象;其作用是子类访问父类构造方法,对其数据进行初始化时使用

package org.wdit.unit09;

/**
 * 抽象类成员特点
 *      成员变量
 *          可以是变量,也可以是final修饰的变量(常量),静态变量
 *      成员方法
 *          可以是静态方法,也可以是非静态方法
 *      构造方法
 *          有构造方法,但是不能被创建对象;其作用是子类访问父类构造方法,对其数据进行初始化时使用
 */
public class AbstractDemo {
}
abstract class Animal{
    public int age;
    private String name;
    public final int num=20;

    //普通方法
    public void method(){

    }
    //抽象方法
    public abstract void method2();
    //静态方法
    public static void method3(){}
    //
    public final void method4(){}

    //构造方法
    public Animal(){}

}
注意事项:

​ 1.有构造方法,但不能被实例化。用于子类初始化父类数据

​ 2.一个类,如果没有抽象方法,但是被定义成抽象类,其目的是为了不让创建该类对象。

​ 3.abstract与其它关键字的关系:

​ 1.private:冲突关系,因为抽象方法必须被子类重写,而private修饰的方法,不能被继承,从而导致不能被重写。

​ 2.final:冲突,因为被final关键字修饰的方法,不能被重写

​ 3.static:冲突,因为static修饰的方法是随类的加载而加载,可以直接通过类名被调用,没有意义

package org.wdit.unit09;

import java.security.DigestException;

/**
 * 需求:
 *     动物:猫,狗
 *     共有的属性和行为:名字,年龄,吃饭,睡觉
 */
public class AbstractText {
    public static void main(String[] args) {
        Dog dog = new Dog("老黑",3);

        dog.show();
        dog.voice();
        dog.eat();
        dog.sleep();

        Cat cat = new Cat("pig",3);

        cat.show();
        cat.voice();
        cat.eat();
        cat.sleep();
    }
}
abstract class Animal1{
    private String name;
    private int age;
    public abstract void voice();
    public abstract void eat();
    public Animal1(){

    }
    public Animal1(String name,int age){
        this.name=name;
        this.age=age;
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public void show(){
        System.out.println("名字:"+name+"年龄:"+age);
    }
}
class Dog extends Animal1{
    public Dog(String name,int age){
        super(name, age);
    }


    @Override
    public void voice() {
        System.out.println("汪汪叫");
    }

    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }
}
class Cat extends Animal1{
    public Cat(String name,int age){
        super(name, age);
    }

    public Cat(){}
    @Override
    public void voice() {
        System.out.println("喵喵叫");
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

2.接口

概述:

​ 接口是一系列方法声明(方法规范)的集合。一个接口中只有方法的特征,没有方法的实现。因为这些方法可以在不同的类中做不同的实现,而这些实现可以具有不同的结果。

特点:

​ 1.定义关键字:interface

​ 格式: interface 接口{}

​ 2.实现接口关键字:implements

​ 格式:class 类名 implements 接口名{}

​ 3.接口不能被创建对象,但是它可以通过多态去实例化

​ 格式:接口名 变量名 = new 实现类名()

​ 4.接口的实现类:

​ a.标准类:重写接口中的抽象方法

​ b.抽象类:不必重写接口中的抽象方法。交由子类来实现

public class InterfaceDemo {
}
class BiJiComputer implements ComputerExtend{
    @Override
    public void print() {
        System.out.println("打印");
    }

    public void learn(){
        System.out.println("我在学习");
    }
    public void playGame(){
        System.out.println("玩英雄联盟,爽歪歪" );
    }
}
abstract class TaiShiComputer implements ComputerExtend{
    
}
interface ComputerExtend{
    public abstract void print();
}

成员特点:

接口的成员特点:     
	1.成员变量         
		接口中不能有变量,只能是常量(默认被 public static final修饰)    	 
	2.成员方法         
		只能是抽象方法,并且默认被public abstract修饰     
	3.构造方法         
		没有构造方法
package zhaotongit.unit01;

/**
 * 接口的成员特点:
 *      1.成员变量
 *          接口中不能有变量,只能是常量(默认被public static final修饰)
 *      2.成员方法
 *          只能是抽象方法,并且默认被public abstract修饰
 *      3.构造方法
 *          没有构造方法
 */
public class InterfaceDemo {
    public static void main(String[] args) {
        //通过多态的方式去创建对象
        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        System.out.println(myInterface.num);
        System.out.println(myInterface.num2);
        System.out.println(myInterface.num3);
        System.out.println(myInterface.num4);
        //直接通过接口名去调用
        System.out.println(MyInterface.num);
        System.out.println(MyInterface.num2);
        System.out.println(MyInterface.num3);
        System.out.println(MyInterface.num4);


    }
}
interface MyInterface{
    //1.成员变量,默认被 public static final修饰
    public int num = 10;
    //private int num1=10;
    public final int num2=10;
    public static int num3=30;
    public static final int num4 =40;
    
    //构造方法
    //public MyInterface(){};没有构造方法

    //2.成员方法
    public abstract void method();
    //abstract void method2();
    //public void method1();
}
interface MyInterface1{

}

class MyInterfaceImpl extends Object implements MyInterface,MyInterface1{
    public MyInterfaceImpl(){
        super();
    }

    @Override
    public void method() {
        System.out.println("你好");
    }

类与接口的关系:

​ 1.类与类

​ 继承关系:单继承或多层继承

​ 2.类与接口

​ 实现关系:单实现或多实现

​ 3.接口与接口

​ 继承关系:单继承或多继承

package zhaotongit.unit01;

/**
 * 1.类与类
 *
 * 		继承关系:单继承或多层继承
 *
 * 2.类与接口
 *
 *		实现关系:单实现或多实现
 *
 * 3.接口与接口
 *
 * 		继承关系:单继承或多继承
 */
public class InterfaceDemo1 {
}
class Father{}
class Mother{}
class Son extends Father{}
class Son1 extends Mother{}
//class Son2 extends Father,Mother{}
// 类与类:单继承或多层继承
interface Play{}
interface Sing{}
class Phone implements Play{}
class Computer implements Play,Sing{}
//类与接口:单实现或多实现
//interface Bother implements Play{}
interface Sister extends Play{}
interface Boy extends Play,Sing{}
//接口与接口:单继承或多继承

注意:

​ 面试题:java中的继承都是单继承?java中的类都是单继承?

接口和抽象类的区别:

1.组成区别

​ 抽象类;

​ 成员变量:变量与变量

​ 成员方法:可以是抽象方法,也可以是普通方法

​ 构造方法:有构造,但是不能创建对象

​ 接口:

​ 成员变量:常量

​ 成员方法:抽象方法 public abstract

​ 构造方法:没有构造方法

2.关系的区别

​ 类与抽象类:继承–单继承或多层继承

​ 类与接口:实现

​ 抽象类与接口:实现

​ 接口与接口:继承–单继承或多继承

3.引用的区别:

​ 抽象类:定义继承体系中相同属性和方法

​ 接口:类的扩展功能

形式参数是引用类型

​ 1.:在T调用方法是,传入相应类的对象(匿名对象)

package zhaotongit.unit01;

/**
 * 形式参数是应用数据类型问题
 *      1.类
 */
public class FunctionDemo3 {
    public static void main(String[] args) {
        TeacherDemo teacherDemo=new TeacherDemo();
        //第一种:创建对象,传入对象
        Teacher teacher = new Teacher();
        teacherDemo.method(teacher);
        //第二种:传入匿名对象
        teacherDemo.method(new Teacher());
    }

}
class Teacher{
    public void teach(){
        System.out.println("教书");
    }
}
class TeacherDemo{
    public void method(Teacher teacher){
        teacher.teach();
    }
}

​ 2.抽象类:在方法调用时,传入抽象类的子类对象

​ 3.接口:在方法调用时,传入的是接口的实现类对象

返回值是引用类型

​ 1.:返回相应类的对象(匿名对象)

package zhaotongit.unit01;

/**
 * 返回值是引用数据类型问题
 *      1.类
 *      2.抽象类
 *      3.接口
 */
public class FunctionDemo {
    //返回值类型是类
    public static Student method(){
        Student student = new Student("屈波",20);
        return student;
    }

    public static void main(String[] args) {
        Student sc =method();
        System.out.println(sc);
        sc.show();
    }
}
class Student{
    //成员变量
    private String name;
    private int age;
    //构造方法
    public Student(String name,int age){
        this.name=name;
        this.age=age;
    }
    //成员方法
    public void show(){
    System.out.println(name+"\n"+age);
}
}

​ 2.抽象类:返回抽象类的子类对象

package zhaotongit.unit01;

/**
 * 形式参数是引用类型--抽象类
 */
public class FunctionDemo1 {
    public static void main(String[] args) {
        //多态
        Pets pets = new Dog();
        Pets pets1 = new Cat();

        method(pets);
        method(pets1);
        
        Pets pets2 = method1();
        System.out.println(pets2);

    }
    //形式参数是引用类型--抽象类
    public static void method(Pets pets){
        pets.voice();
    }
    //返回值类型是抽象类
    public static Pets method1(){
        Pets pets = new Dog();
        //Dog dog =new Dog();
        System.out.println(pets);
        return pets;
    }

}
abstract class Pets{
    abstract void voice();
}
class Dog extends Pets{
    @Override
    void voice() {
        System.out.println("汪汪");
    }
}
class Cat extends Pets{

    @Override
    void voice() {
        System.out.println("喵喵喵");
    }
}

​ 3.接口:返回接口的实现类对象

package zhaotongit.unit01;

/**
 * 形式参数是引用数据类型---接口
 */
public class FunctionDemo2 {
    public static void main(String[] args) {
        //接口
        MyInterface2 myInterface2=new Demo();
        function(myInterface2);

       System.out.println(method());
    }
    //形式参数是引用数据类型---接口
    public static void function(MyInterface2 myInterface2){
        myInterface2.method();
    }
    //返回值类型是接口
    public static MyInterface2 method(){
        MyInterface2 myInterface2=new Demo();
        return myInterface2;
    }
}
interface MyInterface2{
    public abstract void method();

}
class Demo implements MyInterface2{

    @Override
    public void method() {
        System.out.println("你好");
    }
}

3.包

概述:

​ 其实就是文件夹

作用:

​ 对类进行分类管理

关键字:package

格式:

package 包名;(多级包用“.”隔开)

注意事项:

​ 1.package语句必须是第一条可执行语句

​ 2.一个java文件中,只能有一条package语句

​ 3.没有package语句,默认就是没有包

导包:

格式:import 包名.类名
import 包名.*

4.权限修饰符

权限修饰符本类同包不同包下的子类不同包的其他类
private
默认
protected
public

1.常见修饰符

​ 1.权限修饰符:private,默认,protected,public

​ 2.状态修饰符:static ,final

​ 3.抽象修饰符:abstract

常用情景:

1.类

​ 权限修饰符,抽象修饰符,状态修饰符:final

​ 常用:public

2.成员变量

​ 权限修饰符,状态修饰符

​ 常用:private

​ 组合:public final

3.成员方法

​ 权限修饰符,状态修饰符,抽象修饰符

​ 常用:public

​ 组合:public static

​ public static final

​ public abstract

​ public final

4.构造方法

​ 权限修饰符

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽象类 的相关文章

  • Ubuntu下运行文件

    在ubuntu下运行 run文件 a 打开一个终端 ctrl 43 alt 43 t b cd 到 run文件所在目录 c 输入 34 chmod 43 x foo run 34 d 输入 34 foo run 34 run文件就会开始运行
  • 必须掌握的8个dos命令

    一 xff0c ping 它是用来检查网络是否通畅或者网络连接速度的命令 作为一个生活在网络上的管理员或者黑客来说 xff0c ping命令 是第一个必须掌握的DOS命令 xff0c 它所利用的原理是这样的 xff1a 网络上的机器都有唯一
  • 搭建redis集群的时候碰到的错误

    1 出现from usr lib ruby site ruby 1 8 rubygems custom require rb 31 in 96 require from redis trib rb 2 错误 在使用ruby进行搭建redis
  • 疫情分析项目

    疫情期间各类政府媒体及社交网站 xff0c 均发布了相关疫情每日统计数据 xff0c 下面基于数据仓库工具Hive请你统计分析相关疫情数据 数据字段为 xff1a 日期 省份 城市 新增确诊 新增出院 新增死亡 消息来源 来源1 xff0c
  • selenium之css元素定位方法

    一 单一属性定位 xff08 id用 xff0c class用 xff09 1 xff1a type selector driver find element by css selector 39 input 39 2 xff1a id 定
  • 应用宝YSDK的快速接入(单机版只包含了游客模式没有加入其他的功能)

    可复制的代码 xff1a mainfest lt activity android name 61 34 com tencent tauth AuthActivity 34 android noHistory 61 34 true 34 a
  • Linux中error while loading shared libraries错误解决办法

    转载自http www cnblogs com codingmengmeng p 7456539 html 默认情况下 xff0c 编译器只会使用 lib和 usr lib这两个目录下的库文件 xff0c 通常通过源码包进行安装时 xff0
  • Java:常用类

    文章目录 一 Object类1 概述1 hashcode xff08 xff09 2 toString xff08 xff09 3 clone xff08 xff09 4 getClass xff08 xff09 5 notify xff0
  • JavaWeb介绍

    文章目录 1 基本概念1 1介绍1 2 Web应用程序1 静态web2 动态web 2 Web服务器2 1 技术介绍1 ASP2 PHP3 JSP Servlet 2 2 服务器介绍1 IIS2 Tomcat 3 Tomcat3 1 安装3
  • 邮件发送原理及实现

    文章目录 一 邮件发送原理1 1 接收发送过程1 2 邮件服务器1 3 邮件传输协议 二 Java邮件发送2 1 准备环境2 2 介绍2 2 1 授权码 2 3 简单邮件2 3 1 引入2 3 2 步骤一 xff1a 准备参数2 3 3 步
  • 11、MyBatis的逆向工程

    文章目录 11 MyBatis的逆向工程11 1 创建逆向工程的步骤1 添加依赖和插件2 创建mybatis config xml的核心配置文件3 创建逆向工程的配置文件4 执行MBG插件的generate目标5 效果6 窜库问题 11 2
  • 20、单元测试

    文章目录 1 JUnit5 的变化2 JUnit5常用注解3 断言 xff08 assertions xff09 1 简单断言2 数组断言3 组合断言4 异常断言5 超时断言6 快速失败 4 前置条件 xff08 assumptions x
  • 使用模拟器发送短信出现错误的解决方法

    在安卓应用开发揭秘第四章讲解使用模拟器发送短信并使用Toast显示短信息的时候 xff0c 本人遇到过如下错误 xff0c 现有一点个人的浅显理解 xff1a 错误 xff1a Couldn 39 t open fd for content
  • 22、原理解析

    文章目录 1 Profile功能1 application profile功能2 64 Profile条件装配功能3 profile分组 2 外部化配置1 外部配置源2 配置文件查找位置3 配置文件加载顺序 xff1a 4 指定环境优先 x
  • 5、网络配置

    文章目录 5 网络配置5 1 VMware三种模式5 1 1 桥连模式5 1 2 NAT模式5 1 3 仅主机模式 5 2 查看网络IP和网关5 2 1 查看虚拟网络编辑器5 2 2 修改虚拟网卡 Ip5 2 3 查看网关5 2 4 查看
  • 1、认识IntelliJ IDEA

    文章目录 1 认识IntelliJ IDEA1 1 JetBrains公司介绍1 2 IntelliJ IDEA介绍1 3 IDEA的主要优势 xff08 对比Eclipse xff09 1 3 1 功能强大1 3 2 符合人体工程学 1
  • 21、指标监控

    文章目录 1 SpringBoot Actuator1 简介2 1 x与2 x的不同3 如何使用4 可视化 2 Actuator Endpoint1 最常使用的端点2 Health Endpoint3 Metrics Endpoint4 管
  • Android->Activity四种启动模式详解和onNewIntent调用时机

    Activity四种启动模式详解 xff1a 1 standard 默认启动模式 xff0c 每次激活Activity时都会创建Activity xff0c 并放入任务栈中 xff0c 永远不会调用onNewIntent 2 singleT
  • MyEclipse调试小技巧

    前言 现在我们很多人都是使用 MyEclipse 来进行开发 xff0c 最近一段时间我也在使用 MyEclipse xff0c 结合我自己使用过程中的经验以及搜罗的一些小技巧 xff0c 在这里跟大家分享一下 xff0c 帮助我们大家一起
  • Log4j漏洞补救 Log4j2 + SLF4j 升级到最新版本

    一 背景 因Log4j的2 X版本和1 x版本接连爆出漏洞 xff0c 使Log4j不得不升级到最新版本了 xff0c 本博客整合了网上的文章结合自己的实际项目记录本次升级过程 二 搭建步骤 2 1 xff1a 去除直接和间接依赖的log4

随机推荐

  • 统计这句话中每个字母出现的次数 并 打印次数最多和最少的两个字母

    package com zhiyou entity import java util HashMap import java util Map public class ZYtongjicishu public static lt K V
  • 什么是范数(Norm),其具有哪些性质

    文章目录 直观的感受一下范数范数的定义直观的感受下范数的边界图像范数的性质参考资料 直观的感受一下范数 先直观的感受一下二维空间的范数 xff0c 假设在二维空间的向量为 v 61 x y
  • Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))

    文章目录 本文内容HuggingFace简介Hugging Face模型讲解Transforms简介Transformers安装使用Transformers进行推理查找Hugging Face模型使用Hugging Face模型迁移学习 H
  • Eslint 规则说明

    1 34 no alert 34 0 禁止使用alert confirm prompt 2 34 no array constructor 34 2 禁止使用数组构造器 3 34 no bitwise 34 0 禁止使用按位运算符 4 34
  • eclipse无线循环输出时,怎样关闭

    eclipse控制台无限循环输出的时候找到 xff0c 找到控制台右边有一个红色方块按钮 xff0c 点击即可停止运行 如下图 有问题欢迎私聊或者发送邮箱 xff08 964427082 64 qq com xff09 一起讨论
  • goland中报错: Unresolved reference 错误解决

    前言 今天早上项目导入的包标红了 xff0c 而且也包了unresolved reference的错误 xff0c 但是程序却可以正常运行 xff0c 在网上找了多种方法 xff0c 最后可以了 xff0c 但是并不知道是哪一个起了作用 x
  • 关于打游戏ping值不稳定问题的解决经历(疑难篇)

    首先 xff0c 大概几天之前 xff0c 笔者发现自己的电脑在打游戏 xff08 lol xff09 的时候ping值忽高忽低 xff0c 就是突然从20跳到10000 43 xff0c 没有丝毫夸张 xff0c 就是这样吓人 xff0c
  • react、angularjs、vue原理应用场景总结

    React 如图 xff1a React的虚拟DOM的生成是可以在任何支持Javascript的环境生成的 xff0c 所以可以在NodeJS或Iojs环境生成 虚拟DOM可以直接转成String 然后插入到html文件中输出给浏览器便可
  • c++中对象和类的概念以及联系

    1 概念 xff1a 类是对一组性质相同的事物的程序描述 如果类在定义中不指定是private或者public的 xff0c 则系统默认为private的 使用struct声明的类 xff0c 如果对其成员不作private或者public
  • c++学习总结(一些零碎的小知识点)

    1 C 语言中 和 gt 区别 结构体变量用 运算符来访问结构体的成员 指向结构体的指针用 gt 来访问其指向的结构体的成员 gt 指向指针变量的运算符 举例 xff1a p gt m 表示指针 p 指向结构体变量中的成员 m xff1b
  • html学习之

    1 lt xff01 DOCTYPE gt 声明帮助浏览器正确的显示网页 xff0c 不是HTML标签 xff0c 它为浏览器提供了一项声明 xff0c 即HTML是用什么版本编写的 lt DOCTYE html gt lt html gt
  • Ubuntu下ssh服务器文件操作命令

    用java写了一个监视 web服务器的程序 需要部署到Ubuntu服务器版本的系统中 xff0c 遇到的第一个问题就是怎么把这个程序copy到服务器上去 xff33 xff33 xff28 服务器 什么是 xff33 xff33 xff28
  • 小狼毫配置

    小狼毫配置 安装下载 设置 安装完成后 xff0c 右键单击任务栏的小狼毫图标 xff0c 点击 输入法设定 xff0c 勾选输入法 xff08 推荐 朙月拼音 简化字 xff09 xff0c 点击 中 xff0c 选择皮肤后即可使用小狼毫
  • 第27章 联合网关 - Identity Server 4 中文文档(v1.0.0)

    通用架构是所谓的联合网关 在此方法中 xff0c IdentityServer充当一个或多个外部身份提供商的网关 该架构具有以下优点 您的应用程序只需要了解一个令牌服务 xff08 网关 xff09 xff0c 并且屏蔽了有关连接到外部提供
  • Asp.net core3.1 框架中 采用Serilog实现log日志记录

    本文以MVC框架为例 xff0c 实现log记录 在默认情况下 xff0c asp net core有自带的可实现将日志输出到控制台 xff0c 注意 xff0c 此时需要 xff0c 运行时 xff0c 要运行自托管模式才能调出控制台 如
  • 关于Lwip如何实现单网卡多IP设置

    记录 xff1a 关于Lwip如何实现单网卡多IP设置 https wenku baidu com view fb49542683d049649b6658fe html https blog csdn net sinat 20006769
  • 学习java的第一步

    1 走进Java 1 Java的三个平台版本 1 JavaSE J2SE JavaSE是其他两个平台版本的基础 2 JavaME J2ME 针对于移动端开发的版本 3 JavaEE J2EE 针对于web应用的开发版本 跨平台性 因为Jav
  • 面向对象的三大特点

    封装继承多态 1 封装 概念 xff1a 隐藏对象的属性和实现细节 xff0c 对外提供公共的访问方式 原则 xff1a 不需要用户访问的内容隐藏起来 优点 xff1a 1 安全性高 2 独立性高 3 复用性高 span class tok
  • 面向对象版图书管理系统

    span class token keyword package span org span class token punctuation span wdit span class token punctuation span unit0
  • 抽象类

    1 抽象类 概述 xff1a 用来描述抽象概念的类 xff0c 叫做抽象类 抽象类中的方法不一定有具体的实现 span class token keyword package span org span class token punctu