24/03/28总结

抽象类:

将共性的方法抽取到父类之后。由于每一个子类执行的内容是不一样,所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法。
而为什么不直接在子类中定义方法:项目的完成不是一个人,如果有时忘记写方法重写,抽象类就会报错,没有抽象类不会报错
抽象方法的定义格式:
public abstract 返回值类型 方法名(参数列表);
抽象类的定义格式:
public abstract   class 类名{}
抽象类练习:

练习思路:定义父类Animal,青蛙,狗,山羊的属性:名字,年龄,行为:喝水都可以继承于父类Animal,行为吃的内容都不相同,在父类定义抽象类,子类中写出个子吃的行为 

package demo7test;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 void drink(){System.out.println("动物在喝水");}public abstract void eat();    //父类吃为抽象类}
package demo7test;public class Dog extends Animal{//抽象类的子类//1.要么重写抽象类的所有抽象方法(一般用这个)//2.要么是抽象类(因为抽象类不能创建对象,要想创建只能再弄一个子类所以一般都用方法一)public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {        //重写抽象类的所有方法System.out.println("狗在吃骨头");}}
package demo7test;public class Frog extends Animal{public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙在吃虫子");}}
package demo7test;public class Sheep extends Animal{public Sheep() {}public Sheep(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("山羊在吃草");}
}

测试类:

package demo7test;public class test {public static void main(String[] args) {Dog dog = new Dog("小黑", 5);System.out.println(dog.getName() + ", " + dog.getAge());dog.eat();dog.drink();Frog frog = new Frog("小蛙", 3);System.out.println(frog.getName() + ", " + frog.getAge());frog.eat();frog.drink();}
}

代码输出:

 

接口: 

有多个处于继承中子类的类里有共性行为却不是所有子类都有时就需要接口,如果只是在子类中写的话会不统一方法名所以就要用接口来统一
接口的定义和使用:
接口用关键字interface来定义  public interface 接口名 {}
接口不能实例化
接口和类之间是实现关系,通过implements关键字表示  public class 类名 implements 接口名 {}
注意1:接口和类的实现关系,可以单实现,也可以多实现:
    public class 类名 implements 接口名1,接口名2 {}
注意2:实现类还可以在继承一个类的同时实现多个接口:
    public class 类名 extends 父类 implements 接口名1,接口名2 {}

接口练习:

 练习思路:可以看到三种动物的行为中并不是所有类都会游泳这种行为,因为拥有行为的类不止一个所以要定义一个游泳接口

package demo7test;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();    //对于吃行为抽象化
}
package demo7test;public class Dog extends Animal implements Swim{    //狗需要游泳接口public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙吃虫子");}@Overridepublic void swim() {System.out.println("狗在狗刨");}
}
package demo7test;public class Frog extends Animal implements Swim{    //青蛙需要游泳接口@Overridepublic void eat() {System.out.println("青蛙在吃虫子");}@Overridepublic void swim() {System.out.println("青蛙在蛙泳");}
}
package demo7test;public class Rabbit extends Animal{public Rabbit() {}public Rabbit(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("兔子在吃胡萝卜");}
}
package demo7test;public interface Swim {        //接口//成员方法:可以是抽象方法(目前只知道这个)(默认修饰符:public abstract(你不写也可以因为是默认的,两个混合)),有方法体的方法,私有方法public abstract void swim();    
}

测试类:

package demo7test;public class test {public static void main(String[] args) {Dog dog = new Dog("小黑", 3);System.out.println(dog.getName() + ", " + dog.getAge());dog.eat();dog.swim();Rabbit rabbit = new Rabbit("小白",2);System.out.println(rabbit.getName()+", "+rabbit.getAge());rabbit.eat();}}

可以看到兔子并没有游泳行为 

 

输出结果: 

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BaseDao封装增删改查

文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…

python函数参数中独立星号*的作用

python函数中间有一个()分隔,星号后面为*命名关键字参数,星号本身不是参数**。命名关键字参数,在函数调用时必须带参数名字进行调用。如下例子:

【Netty 源码】NioEventLoop 源码分析 篇二

【Netty 源码】NioEventLoop 源码分析 篇二 1.NioEventLoop 继承关系 NioEventLoop继承自SingleThreadEventLoop,一次只能执行一个线程任务,因此在父类SingleThreadEventLoop中维护了 Queue tailTasks 线程队列。 NioEventLoop又间接继承了 AbstractS…

六千字详解!一篇看懂 ArrayList 的扩容机制(完整源码解析)

☀️今天花了很久写了这篇关于 ArrayList 扩容机制源码解析的博客,在阅读源码的过程中发现了很多之前有误解的地方,也加深了对代码的理解,所以写下了这篇博客。 🎶本文附带了流程中所有的代码和附加解析,我有信心一定能…

五款常用在线JavaScript加密混淆工具详解:jscrambler、JShaman、jsfack、ipaguard和jjencode

摘要 本篇技术博客将介绍五款常用且好用的在线JavaScript加密混淆工具,包括 jscrambler、JShaman、jsfack、freejsobfuscator 和 jjencode。通过对这些工具的功能及使用方法进行详细解析,帮助开发人员更好地保护和加密其 JavaScript 代码,提…

STM32之HAL开发——串口配置(CubeMX)

串口引脚初始化(CubeMX) 选择RCC时钟来源 选择时钟频率,配置为最高频率72MHZ 将单片机调试模式打开 SW模式 选择窗口一配置为异步通信模式 点击IO口设置页面,可以看到当前使用的串口一的引脚。如果想使用复用功能,只需…

原型链-(前端面试 2024 版)

来讲一讲原型链 原型链只存在于函数之中 四个规则 1、引用类型,都具有对象特性,即可自由扩展属性。 2、引用类型,都有一个隐式原型 __proto__ 属性,属性值是一个普通的对象。 3、引用类型,隐式原型 __proto__ 的属…

Vue——案例01(查询用户)

一、案例实现页面 二、案例实现效果 1. 查询效果 2. 年龄升序 3. 年龄降序 4. 原顺序 三、案例实现思路 1. 定义界面所需标签样式 <div id"app"><h2>查询用户:</h2><input type"text" placeholder"请输入名字"/><b…

代码随想录算法训练营第35天| 435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 题目链接&#xff1a;无重叠区间 题目描述&#xff1a;给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 解题思想&#xff1a; 这道题目和射气球很像。 *“需…

rust使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…

代码随想录算法训练营第二十四天|77.组合、216.组合Ⅲ

文档链接&#xff1a;https://programmercarl.com/ LeetCode77.组合 题目链接&#xff1a;https://leetcode.cn/problems/combinations/ 思路&#xff1a; 回溯三部曲&#xff1a; 第一步&#xff1a;确定函数返回值和参数类型 第二步&#xff1a;确定终止条件 第三步&a…

JUC/多线程的基本使用(一)

一、基本使用 Thread、Runnable、FutureTask Java多线程-CSDN博客https://blog.csdn.net/m0_71534259/article/details/132381495?spm1001.2014.3001.5501 二、查看进程线程的方法 windows 任务管理器可以查看进程和线程数&#xff0c;也可以用来杀死进程 tasklist 查看…