当前位置: 首页 > news >正文

(Java入门)抽象类,接口,内部类

一.抽象类

抽象关键字:abstract----抽象方法--所在的类--抽象类

抽象方法--子类必须强制重写,否则代码直接报错。

注意:抽象类不能创建对象(不能实例化)

抽象类有构造方法,当创建子类对象时,给属性赋值使用。

  

其父类不一定是抽象的

吃--定义为抽象方法--所在的类--抽象类

当子类继承抽象类的时候,需要重写空参和带全部参数的构造。并且重写抽象方法。

package demo5;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 demo5;public class Dog extends Animal{public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("狗在吃狗粮");}
}
package demo5;public class Frog extends Animal{public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙在吃虫子");}
}
package demo5;public class Test {public static void main(String[] args) {Dog d1=new Dog("taidi",5);System.out.println(d1.getName()+","+d1.getAge());d1.drink();d1.eat();}
}

抽象类和抽象方法的出现,使子类变得统一

二.接口

按照接口里面定义的书写规则写代码(实现代码的统一):接口---------理解为规则

光写在子类里面,就有可能不统一。---写一个抽象类将其统一起来。

接口--理解为一种规则------当需要给多个类同时定义规则的时候,就需要用到接口。

接口--对行为的一种抽象。

 抽象类--更多用在父类当中     接口--侧重于行为

一个类可以实现多个接口:

 

当继承抽象的父类和接口时,需要进行重写

package demo6;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 demo6;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 demo6;import demo5.Animal;public class Frog extends Animal implements Swim{public Frog() {}public Frog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("青蛙吃虫子");}@Overridepublic void swim() {System.out.println("青蛙会蛙泳");}
}
package demo6;public class Rabbit extends Animal{public Rabbit() {}public Rabbit(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("兔子吃胡萝卜");}}
package demo6;public interface Swim {public abstract void swim();
}
package demo6;public class Test {public static void main(String[] args) {Frog qw1=new Frog("xiaoqin",2);qw1.eat();qw1.swim();System.out.println(qw1.getAge()+","+qw1.getName());Dog d1=new Dog("td",3);d1.eat();d1.swim();System.out.println(d1.getName()+","+d1.getAge());Rabbit r1=new Rabbit("小白",1);r1.eat();System.out.println(r1.getName()+","+r1.getAge());}
}

 三.接口的细节

1.接口是一种规则,不能被改变  接口中的成员变量都是常量,会用final去修饰

2.没有构造方法,不能创建对象,也不需要给子类的成员变量去赋值

//test测试类在运行时的id

继承一个接口,要重写所有的方法。

四.综合案例

设置继承:子类是父类的一种+一个父类中所有的子类需要是同一种事物。

 

相关文章:

  • Win/Mac/Linux/Andriod/IOS界面UI设计 - pyside6 - 01 基础系统框架
  • 超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验
  • Hadoop,ActiveMQ,RabbitMQ,Springboot Actuator未授权访问漏洞(附带修复方法)
  • 全网最最最详细的haproxy详解!!!
  • MapReduce入门教程
  • 白骑士的Matlab教学进阶篇 2.1 数据可视化
  • 【无标题】Unity Asset Hunter 插件
  • 【总结】TCP/IP四层模型的理解
  • PHP多商家营销活动平台系统小程序源码
  • 如何写好提示词?《Midjourney常用关键词大全》-附关键词文件
  • HTTP、HTTPS、SOCKS5 三种协议特点详解
  • 华为od(D卷)最大社交距离
  • 数学中常用的解题方法
  • cassandra-driver,一个超强大的Python库
  • vue3仿飞书头像,根据不同名称生成不同的头像背景色
  • 10个最佳ES6特性 ES7与ES8的特性
  • ES6简单总结(搭配简单的讲解和小案例)
  • FastReport在线报表设计器工作原理
  • Java 23种设计模式 之单例模式 7种实现方式
  • Javascript基础之Array数组API
  • java第三方包学习之lombok
  • Java精华积累:初学者都应该搞懂的问题
  • Js基础——数据类型之Null和Undefined
  • leetcode讲解--894. All Possible Full Binary Trees
  • October CMS - 快速入门 9 Images And Galleries
  • PHP的类修饰符与访问修饰符
  • React Transition Group -- Transition 组件
  • SQLServer之创建数据库快照
  • vue2.0项目引入element-ui
  • 记一次和乔布斯合作最难忘的经历
  • 思考 CSS 架构
  • 算法---两个栈实现一个队列
  • 为什么要用IPython/Jupyter?
  • 第二十章:异步和文件I/O.(二十三)
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (多级缓存)缓存同步
  • (二) 初入MySQL 【数据库管理】
  • (二)springcloud实战之config配置中心
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)ABI是什么
  • (转)Linq学习笔记
  • ***通过什么方式***网吧
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 发展历程
  • .NET4.0并行计算技术基础(1)
  • .NET单元测试
  • .Net环境下的缓存技术介绍
  • @RequestParam,@RequestBody和@PathVariable 区别
  • @RunWith注解作用