抽象类和接口

news2024/11/28 6:26:07

文章目录

前言

一、今日回顾

1.《高等数学》

2.阅读:

3.英语:

二、编程的那些事

1.引入库

2.读入数据

总结


前言


一、今日回顾

1.《高等数学》

2.阅读:

3.英语:

二、编程的那些事

1.抽象类的描述

在java中,一个没有方法体的方法应该被定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

public abstract class Animal {

    public abstract void eat();
}

2.

//抽象类
public abstract class Animal {

    public abstract void eat();
 //抽象类里面可以有具体的方法体。//抽象类可以有具体的方法体,没有抽象方法,不过一般不那么做
    public void sleep(){
        System.out.println("睡觉");
    }

}
//Cat类继承Animal类,重写抽象方法

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

//测试类
public class AnimalDemo {
    public static void main(String[] args) {
     Animal a =new Cat();
     a.eat();//eat方法再Animal里是抽象的,但在Cat类中被重写了
   //编译看左边Animal,执行看右边Cat
     a.sleep();
    }
}

总结

抽象类的特点

  • 抽象类和抽象方法必需使用abstract关键字修饰

   public abstract class类名{}

   public abstract void eat();

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
  • 抽象类不能被实例化,那抽象类如何被实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态。
  • 抽象类的子类

   要么重写抽象类中的所有抽象方法

   要么是抽象类


 案例2:

public abstract class Animal {

    private  int age=20;
    private final String city="北京";//city被final修饰,变为一常量
    public Animal(){

    }
    public Animal(int age){
       this.age=age;
    }
    public abstract void eat();

    public void show(){
        age=40;
        System.out.println(age);
        System.out.println(city);
    }

}
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
     Animal a =new Cat();
     a.eat();//eat方法再Animal里是抽象的,但在Cat类中被重写了
   //编译看左边Animal,执行看右边Cat
   a.show();
    }
}

 

 小结:抽象类的成员特点

  • 成员变量

可以是变量,也可以是常量

  • 构造方法

有构造方法,但不能被实例化,那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化

  • 成员方法

可以有抽象方法:限定子类必须完成某些动作

也可以有非抽象方法;提高代码的复用性

public abstract class Animal {


    private  String name;
    private  int age;
    public Animal(){

    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();//不写方法体,用abstract
}
public class Cat extends Animal {
    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

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

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
        //创建对象,按照多态的形式
        Animal a=new Cat();
        a.setName("卡菲猫");
        a.setAge(5);
        System.out.println(a.getName()+","+a.getAge());
        a.eat();
        System.out.println("……");
        a=new Cat("加菲猫",5);
        System.out.println(a.getName()+","+a.getAge());
        a.eat();
        System.out.println("……");
        Animal dog=new Dog();
        dog.setAge(10);
        dog.setName("小防鼠");
        System.out.println(dog.getName()+","+dog.getAge());
        dog.eat();
        System.out.println("……");
        dog=new Dog("小防鼠",10);
        System.out.println(dog.getName()+","+dog.getAge());
        dog.eat();

    }
}

 接口

public interface Jumpping {
    void jump();
}
public class Cat implements Jumpping{
    public void jump(){
        System.out.println("猫可以调高了");
    }

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

        Jumpping j=new Cat();

        j.jump();
    }
}
public interface Inter {
    public int num=10;
    public final int num2=20;
}

 

public class InterImpl implements Inter{
    public int num=11;

}
public class InterfaceDemo {
    public static void main(String[] args) {
        Inter i=new InterImpl();
        System.out.println(i.num);
        System.out.println(Inter.num2);

    }
}

 

 

接口的成员特点

  • 成员变量

只能是常量

默认修饰符:public static final

  • 构造方法

接口没有构造方法,因为接口主要对行为进行抽象,是没有具体存在的。一个类如果没有父类,默认继承自Object类。

成员方法

只能是抽象方法

默认修饰符:public abstract

猫狗案例(接口版)

public interface Jumpping {
    void jump();
}

public abstract class Animal {
    private  String name;
    private  int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public abstract void eat();
}
public class Cat extends Animal implements Jumpping {

    public Cat() {
    }

    public Cat(String name, int age) {
        super(name, age);
    }

    public void jump(){
        System.out.println("猫可以调高了");
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}
public class AnimalDemo {
    public static void main(String[] args) {
        Jumpping j=new Cat();
        j.jump();
        Animal a=new Cat();
        a.setName("加菲猫");
        a.setAge(8);
        System.out.println(  a.getAge()+a.getName());
        a.eat();
        System.out.println("-----");

        a=new Cat("加菲",8);
        System.out.println(  a.getAge()+a.getName());
        a.eat();
        System.out.println("-----");

        Cat c=new Cat();
        c.setName("加菲猫");
        c.setAge(8);
        System.out.println(  c.getAge()+c.getName());
        c.eat();
        c.jump();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次函数与二次函数的联系

首先,无论是一次函数还是二次函数,都是函数,所以便可以从表达式,图像,函数的四个性质(即有界性,单调性,奇偶性,周期性)去看他们之间的联系 一次函数与二次函…

2022第8届中国大学生程序设计竞赛CCPC桂林站, 签到题4题

文章目录A. LilyM.Youth FinaleC.Array ConcatenationE.Draw a triangleA. Lily A. Lily time limit per test1 second memory limit per test512 megabytes inputstandard input outputstandard output They serve the purpose of changing hydrogen into breathable oxygen,…

MySQL数据库 -- 库和表的操作

关于数据库方面,还是需要多多练习的,否则很多指令不容易记住,所以大家也要在自己的电脑上多写写,熟悉熟悉~ 目录 库的操作 创建数据库 操纵数据库 查看数据库 显示创建语句 修改数据库 数据库的删除 数据库备份和恢复 …

重学数据库基础

幸福找到我,幸福说:“瞧这个诗人,他比我本人还要幸福” 一、数据库相关概念 数据库 存储数据的仓库,数据是有组织的进行存储英文:DataBase,简称 DB 数据库管理系统 管理数据库的大型软件英文:Da…

CSI室内指纹定位——相关通信名词解释

目录 1、无线信道 2、时域与频域 3、信道频率响应(Channel Frequency Response,CFR) 4、信道冲激响应(Channel Impulse Response, CIR) 5、信道带宽 6、带宽 7、子载波 9、波长 10、频率 11、振幅 12、相位 13、相位差…

高数值孔径(NA)物镜的聚焦分析

1. 摘要 高NA物镜广泛用于光刻,显微等技术。因此,聚焦仿真中考虑光的矢量性质至关重要。VirtualLab可以非常便捷地对此类镜头进行光线追迹和场追迹分析。通过场追迹,可以清楚地观察由于矢量效应引起的聚焦光斑失对称现象。利用相机探测器和电…

第十四届蓝桥杯(Web应用开发)模拟赛1期-大学组

数据类型检测 请看这篇数据类型检测 渐变色背景生成器 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name&…

java面试官:程序员,请你告诉我是谁把公司面试题泄露给你的?

前情提要&#xff1a; 面试官&#xff1a;你好&#xff01;请先做一下自我介绍&#xff01; 程序员&#xff1a;balabalabala... 前戏先过了.... 面试官&#xff1a;先介绍SpringCloud核心组件及其作用 程序员&#xff1a;SpringCloud由以下5个核心组件构成...另外&#x…

MySQL事务基本操作(方式1)

在观看本文前 你需要了解什么事事务 如果不太了解 可以先查看我的文章 MySQL事务基本概念 首先 我们这里有一张 staff 用户表 然后来一波 减岁交易大法 赵敏买个了 黄飞鸿十年时光 那么就是 先查询确认赵敏加上十岁不会过百 将赵敏年龄加十岁 确认黄飞鸿减去十岁不会小于零 然…

Java项目(三)-- SSM开发社交网站(9)--后台图书管理功能

后台图书管理功能 富文本编辑器wangEditor 基于javascript与css开发是Web富文本编辑器&#xff0c;轻量、简洁、易用、开源免费。 代码演示 我们在test.ftl中添加富文本编辑器演示下 <!DOCTYPE html> <html lang"en"> <head><meta charset&…

CMake中string的使用

CMake中的string命令用于字符串操作,其格式如下&#xff1a; Search and Replacestring(FIND <string> <substring> <out-var> [...])string(REPLACE <match-string> <replace-string> <out-var> <input>...)string(REGEX MATCH &l…

【数据库Redis】Redis五种基本数据结构以及三种配置方式——默认配置、运行配置、配置文件启动

文章目录一、初识Redis1.1 了解Redis1.2 Redis特性1.3 Redis使用场景Redis不适合场景1.4 用好Redis的建议1.5 正确安装并启动Redis在Linux上安装Redis在Windows上安装Redis配置、启动、操作、关闭Redis1)、启动Redis2)、Redis命令行客户端3)、停止Redis服务1.6 Redis重大版本一…

JVM(十四)—— StringTable

JVM&#xff08;十四&#xff09;—— StringTableString的基本特性String的内存分配字符串拼接intern方法常见面试题&#xff1a;到底创建了几个String对象String的基本特性 作为一名Java程序员肯定少不了和 String打交道&#xff0c;使用方法就是将字符串用一对""…

SpringCloud 远程调用

目录 1. SpringCloud 2. Nacos 3. 远程通信 3.1 创建公共子模块 (nacos_commons) 3.1.1 DTO对象 3.2 父项目引入子项目 (nacos_commons) 打成的jar包 3.3 父项目指向子项目 (nacos_commons) 为儿子 3.4 子项目 (nacos_provider) 3.5 子项目 (nacos_consumer) …

【Netty】九、Netty自定义协议

Netty自定义协议一、Netty自定义协议二、 协议设计三、 协议实现编码&#xff1a;解码&#xff1a;时间轮算法Netty中的时间轮一、Netty自定义协议 公有协议&#xff08;http、tcp&#xff09;、私有协议&#xff08;自己定义的&#xff0c;不是行业标准&#xff09; 我们知道…

[Qt]QMainWindow

目录 1.基本概述 2.菜单栏 3.工具栏 4.状态栏 5.铆接部件 6.中心部件 7.资源文件 &#xff08;1&#xff09;创建菜单栏&#xff0c;及菜单项 (2)创建工具栏 (3)创建锚接部件 (4)创建中心文件 &#xff08;5&#xff09;创建状态栏 1.基本概述 QMainWindow是一个为…

腾讯网关TGW基础原理入门

本文是在组内技术分享的发言稿&#xff0c;主要介绍 TGW 基本原理和架构&#xff0c;同时为了加深理解&#xff0c;会辅助对比 TGW 与 LVS&#xff08;ipvs&#xff09;的异同。 本次分享是偏基础性的 TGW 介绍&#xff0c;不会特别深入技术细节&#xff0c;目的是帮助需要用到…

算法7:迪杰斯特拉算法

目录1. 应用场景-最短路径问题2. 迪杰斯特拉(Dijkstra)算法介绍3. 迪杰斯特拉(Dijkstra)算法过程4. 算法分析过程5. 代码实现1. 应用场景-最短路径问题 看一个应用场景和问题 胜利乡有7个村庄(A, B, C, D, E, F, G) &#xff0c;现在有六个邮差&#xff0c;从G点出发&#xff…

贪吃蛇OneDay

环境 配置git环境 安装Git Bash&#xff08;使用Mac和Linux的同学可以跳过这一步&#xff09;&#xff1a;https://gitforwindows.org/ 进入家目录生成秘钥&#xff1a;执行命令ssh-keygen 在Ac Git上注册账号&#xff0c;地址&#xff1a;https://git.acwing.com/ 将id_rsa.p…

Unity中的AssetBundle

AssetBundle的概念 AssetBundle又称AB包&#xff0c;是Unity提供的一种用于存储资源的资源压缩包&#xff0c;是对Unity 初始Resources的一种扩展&#xff1b;一般使用的策略是把必须的资源和不需要更新的资源放在Resources文件夹下&#xff0c;其他的资源放在AssetBundle下面…