iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中对象、类、抽象类三者有什么关系
  • 692
分享到

Java中对象、类、抽象类三者有什么关系

2023-06-06 13:06:31 692人浏览 薄情痞子
摘要

Java中对象、类、抽象类三者有什么关系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。package Java从入门到项目实战.抽象类与接口;//动物interfac

Java中对象、类、抽象类三者有什么关系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

package Java从入门项目实战.抽象类与接口;//动物interface animal{ public abstract String breathe();}//哺乳动物---接口继承extend//类实现的话--implementsinterface mammals extends animal {// 全局方法// 抽象方法}//卵生动物interface Egg_laying_animals extends animal {// 全局方法// 抽象方法}//定义人类抽象类(属于哺乳动物)abstract class peopel implements mammals{}//定义非人类抽象类(输入哺乳动物)abstract class small_animal implements mammals{}//学生 属于人类中class student extends peopel{ @Override public String breathe() {  return null; }}public class 接口综合 { public static void main(String[] args) {//  对象:类的实例化  student std = new student();  System.out.println(std.breathe()); }}

接口:

1.接口的基本定义:

package Java从入门到项目实战.抽象类与接口;interface IMessageF{ //在接口可以定义全局变量、抽象方法(public权限)、default方法以及static方法; //如果接口中有抽象方法,那么接口必须需要子类进行实例化 public static final String INFO = "xbhog"; //全局变量 public abstract String getInfo(); //抽象方法}class MessageIpml implements IMessageF{ @Override public String getInfo(){ //方法覆写  return "hello xbhog!"; //获取消息 }}public class 接口的基本使用 { public static void main(String[] args) {  //接口的调用 实例化  IMessageF msg = new MessageIpml(); //子类实例化父类接口  System.out.println(msg.getInfo()); }}

2.子类实现多个父接口与实例转换

package Java从入门到项目实战.抽象类与接口;interface Imessage1{ public static final String INFO = "xbhog"; public abstract String getInfo();}interface IChannel{ public abstract boolean connect();}//实现多个接口,继承了两个,所以在子类中需要进行覆写父类中的抽象方法class MessageImpl1 implements Imessage1,IChannel{ @Override public String getInfo(){  if(this.connect()){   return "博客地址:www.cnblogs.com/xbhog/";  }  return "【默认消息】"+ Imessage1.INFO; } @Override public boolean connect(){  return true; }}public class 子类实现多个父接口 { public static void main(String[] args) {  Imessage1 msg = new MessageImpl1();  System.out.println(msg.getInfo());  //--------观察接口实例转换-------------  Imessage1 msg1 = new MessageImpl1();  Object obj = msg1; //向上转型  IChannel channel = (IChannel) obj; //对象强制转换成IChannel接口实例  System.out.println(channel.connect()); }}

3.子类继承抽象类同时实现接口

package Java从入门到项目实战.抽象类与接口;//消息接口interface IMessage1{ public static final String INFO = "xbhog"; public abstract String getInfo();}//通道接口interface IChannel1{ public abstract boolean connect();}//定义一个抽象类abstract class DatabaseAbstract{ public abstract boolean getDatabaseConnection();}//继承于抽象类,同时实现接口class MessageImpl2 extends DatabaseAbstract implements IMessage1,IChannel1{ @Override public String getInfo() {  if (this.connect()){   if(this.getDatabaseConnection()){    return "【数据库消息】博客地址:https://www.cnblogs.com/xbhog/";   }else {    return "数据库消息无法访问!";   }  }  return "【默认消息】:"+IMessage1.INFO; } @Override public boolean connect() {  return true; } @Override public boolean getDatabaseConnection() {  return true; }}public class 子类继承抽象类并实现接口 { public static void main(String[] args) {  IMessage1 msg = new MessageImpl2();  System.out.println(msg.getInfo()); }}

4.extends继承多个父接口

关于接口的简化:在定义接口时,对于全局常量和抽象方法可以省略static final与 abstract关键字;

package Java从入门到项目实战.抽象类与接口;interface Imessage3{ public static final String INFO = "xbhog"; public abstract String getInfo();}interface IChannel3{ public boolean connect(); //抽象方法,省略了abstract;}interface IService extends Imessage3,IChannel3{ public String service(); //抽象方法,省略了abstract;}class MessageService implements IService{ @Override public String getInfo() {  return Imessage3.INFO; } @Override public boolean connect() {  return false; } @Override public String service() {  return "【数据库消息服务】:Https://www.cnblogs.com/xbhog/"; }}public class 使用extends继承多个父接口 { public static void main(String[] args) { }}

5.接口的加强

为什么需要加强接口:首先需要明白,在接口下的子类需要覆写父类的方法,如果该接口下有1000多个子类,不巧的是接口需要增加方法,那么每个子类都要覆写一遍新添的方法,想想都很恐怖;在此基础上增加了弥补的方法

1 增加default定义普通方法:便于扩充接口同时简化设计结构

package Java从入门到项目实战.抽象类与接口;interface IMessage{// 必须覆写 public String message(); //抽象类 public default String messageSmple(){  return "null"; };// 定义接口普通方法,增加了接口的灵活性// 当子类过多是,增加一个新的方法,那么需要每个子类都需要覆写一边// default的普通方法解决了该问题,当子类需要的时候覆写,不需要时放置 public default boolean connect(){  System.out.println("建立关注xbhog的通道....");  return true; }}class MessageImpl implements IMessage{ public String message(){  return "xbhog"; }}public class 接口定义加强使用default定义普通方法 { public static void main(String[] args) {  IMessage msg = new MessageImpl();  if(msg.connect()){   System.out.println(msg.message());  } }}

2 default缺点:必须通过接口实例化对象才能调用,为了避免实例化对象的依赖,可以使用static方法,隐藏接口调用的细节

package Java从入门到项目实战.抽象类与接口;interface ImessageS{ public String message();// 定义公共方法,被所有子类继承 public default boolean connect(){  System.out.println("建立订阅xbhog博客的通道.....");  return true; }// 建立static静态方法,可以通过接口名称直接调用 public static ImessageS getInstance(){//  获得子类对象  return new MessageImple(); }}class MessageImple implements ImessageS{ public String message(){  if(this.connect()){   return "www.cnblogs.com/xbhog";  }  return "null"; }}public class 在接口中定义static方法 { public static void main(String[] args) {//  实例化子类接口对象  ImessageS msg = ImessageS.getInstance();  System.out.println(msg.message()); }}

抽象类:

抽象类的特点:

  1. 含有抽象方法的类一定是抽象类

  2. 抽象类不一定还有抽象方法

  3. 抽象类中既可以有抽象方法也可以有非抽象放方法

  4. 如果子类继承了抽象方法,要么重写抽象类中的抽象方法,要么子类就声明为抽象类

  5. 不能创建对象,因为方法没有具体实现,创建对象没有作用,抽象类是用来继承的

  6. 基本定义

abstract class Message{ private String type; public abstract String getConnectInfo();//抽象方法 public void setType(String type){ //普通方法  this.type = type; }}

抽象类的构造方法

package Java从入门到项目实战.抽象类与接口;//构造抽象方法abstract class abMessage{ private String type; //此时抽象类中没有提供无参构造方法,所以在子类必须明确调用单参构造方法  public abMessage(String type){  this.type = type; } public abstract String getContentInfo(); public String getType() {  return type; } public void setType(String type) {  this.type = type; }}class Database extends abMessage{ //子类构造 public Database(String type) {  //调用父类单参构造方法  super(type); }//覆写抽象类方法 @Override public String getContentInfo() {  return "【"+super.getType()+"】数据库连接信息"; }}public class 构造方法 { public static void main(String[] args) {  abMessage demo = new Database("xbhog");  System.out.println(demo.getContentInfo()); }}

抽象类中定义static 方法:该类方法不受到抽象类实例化对象的限制

package Java从入门到项目实战.抽象类与接口;abstract class message{ public abstract String getInfo(); public static message getInstance(){  return new datamessage(); }}class datamessage extends message{ @Override public String getInfo() {  return "xbhog数据库连接"; }}public class 抽象类定义static { public static void main(String[] args) {  //因为该方法被static修饰,全局使用message.getInstance相当于new datamessage();  message mes = message.getInstance();  System.out.println(mes.getInfo()); }}

模板设计模式

package Java从入门到项目实战.抽象类与接口;//抽象三个公共行为abstract class Action{ static final int EAT = 1; //吃饭指令 static final int SLEEP = 5; //睡觉指令 static final int WORK = 10; //工作指令 public abstract void eat(); public abstract void sleep(); public abstract void work(); public void command(int code){  switch (code){   case EAT:{    this.eat();    break;   }   case SLEEP:{    this.sleep();    break;   }   case WORK:{    this.work();    break;   }   case EAT+SLEEP+WORK:{    this.eat();    this.sleep();    this.work();    break;   }  } }}//具象化 机器人class Rebot extends Action{ @Override public void eat() {  System.out.println("机器人需要接通电源充电"); } @Override public void sleep() { } //机器人不需要睡觉 @Override public void work() {  System.out.println("机器人按照固定的设置进行工作"); }}//具象化 人class Person extends Action{ @Override public void eat() {  System.out.println("人需要吃五谷杂粮来维持生命力"); } @Override public void sleep() {  System.out.println("不睡觉会死的"); } @Override public void work() {  System.out.println("每天工作996"); }}//具象化 猪class pig extends Action{ @Override public void eat() {  System.out.println("使劲吃,养肥了卖钱"); } @Override public void sleep() {  System.out.println("不睡觉,养不肥"); } @Override public void work() { }}public class 模板设计模式 { public static void main(String[] args) {  Action rebotAction = new Rebot();  Action personAction = new Person();  Action pigAction = new pig();  System.out.println("机器人行为---------");  rebotAction.command(Action.SLEEP);  rebotAction.command(Action.WORK);  System.out.println("人类行为----------");  personAction.command(Action.WORK+Action.SLEEP+Action.EAT);  System.out.println("猪的行为-------");  pigAction.command(Action.SLEEP); }}

综合案例练习:

Java中对象、类、抽象类三者有什么关系

实现相关代码:

package Java从入门到项目实战.抽象类与接口;//定义人这个类abstract class people{ private String name; private String age; public people() {} public people(String name,String age){  this.name = name;  this.age= age; } public abstract void eats(); //定义抽象方法 public void setName(String name) {  this.name = name; } public void setAge(String age) {  this.age = age; } public String getName() {  return name; } public String getAge() {  return age; }}//定义运动员抽象类abstract class athletes extends people{ public athletes(){} public athletes(String name, String age){  super(name,age); }// 抽象方法 public abstract void study();}interface speakEnglish{ public abstract void speak();}//定义教练的抽象类abstract class coach extends people{ public coach(){} public coach(String name,String age){  super(name,age); } public abstract void teach();}//篮球运动员class Basketball_player extends athletes{ public Basketball_player(String name, String age){  super(name,age); } @Override public void eats() {  System.out.println("篮球运动员正在吃饭...."); } @Override public void study() {  System.out.println("篮球运动员正在学习......"); }}//乒乓球远动员class pingpang extends athletes implements speakEnglish{ public pingpang(String name, String age){  super(name,age); } @Override public void eats() {  System.out.println("乒乓球运动员正在吃饭...."); } @Override public void study() {  System.out.println("乒乓球运动员正在学习......"); } @Override public void speak() {  System.out.println("乒乓球运动员练习英语口语......"); }}//乒乓球教练class pingpanGCoach extends coach implements speakEnglish{ public pingpangCoach(String name, String age){  super(name,age); } @Override public void eats() {  System.out.println("乒乓球教练正在吃饭....."); } @Override public void teach() {  System.out.println("乒乓球教练正在授课...."); } @Override public void speak() {  System.out.println("乒乓球教练练习英语口语....."); }}//篮球教练class BasketballCoach extends coach{ public BasketballCoach(String name, String age){  super(name, age); } @Override public void eats() {  System.out.println("篮球教练正在吃饭"); } @Override public void teach() {  System.out.println("篮球教练正在授课......"); }}public class 综合案例实现 { public static void main(String[] args) { }}

看完上述内容,你们掌握Java中对象、类、抽象类三者有什么关系的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: Java中对象、类、抽象类三者有什么关系

本文链接: https://www.lsjlt.com/news/247251.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中对象、类、抽象类三者有什么关系
    Java中对象、类、抽象类三者有什么关系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。package Java从入门到项目实战.抽象类与接口;//动物interfac...
    99+
    2023-06-06
  • Java中类和对象有什么关系
    这期内容当中小编将会给大家带来有关Java中类和对象有什么关系,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、首先介绍两个概念类:类是对现实生活中一类具有共同属性和行为事务的抽象,确定对象将会拥有的属性...
    99+
    2023-06-14
  • java中抽象类有什么作用
    抽象类在Java中有以下作用:1. 定义共同的属性和方法:抽象类可以包含属性和方法的定义,这些属性和方法可以被其子类继承和重写。抽象...
    99+
    2023-08-11
    java
  • python中类对象和类属性有什么关系
    本篇文章为大家展示了python中类对象和类属性有什么关系,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lon...
    99+
    2023-06-14
  • Java 面向对象 之 抽象类 abstract
    转载于 : http://www.verejava.com/id=16992804621647 public class TestAbstract {public static&n...
    99+
    2023-06-02
  • Java中的抽象类
    目录 一、抽象类是什么?1.引入库2.读入数据 二、抽象类的特点注意 : 三、总结 一、抽象类是什么? 父类知道子类一定要完成某个功能,但是每个子类完成...
    99+
    2023-09-11
    java 开发语言
  • java抽象类与普通类有什么区别
    Java抽象类与普通类有以下区别:1. 实例化:抽象类不能被实例化,即不能创建抽象类的对象,而普通类可以被实例化。2. 继承:子类继...
    99+
    2023-09-22
    java
  • Java面向对象:抽象类的学习
    本文介绍了抽象类的基本语法概念,什么是抽象类. Java中抽象类的语法,抽象类的特性 抽象类的作用(抽象类和普通类的区别) 用抽象类实现多态… 抽象类的学习 一.什么是抽象类二.抽象类语...
    99+
    2023-09-11
    java 学习 jvm
  • java中的抽象类有哪些
    java中的抽象类有:1.实现类;2.执行类;3.测试类;4.动物类;java中的抽象类有以下几种实现类public class Cat extends Animal(){public void shout(){System.out.pri...
    99+
    2024-04-02
  • Java中接口和抽象类有什么不同
    Java中接口和抽象类有什么不同?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。抽象类下面我们通过一个例子来看一个典型的抽象类的使用场景。Logger 是一个记录...
    99+
    2023-06-15
  • Python类与对象之间有什么关系?
    : 在Python中,类和对象之间的关系非常密切,类是对象的模板,而对象是类的实例。类定义了对象的属性和方法,而对象则包含了具体的数据。 类是一个抽象的概念,它描述了一组具有共同特征和行为的对象。类可以被用来创建对象,对象是类的实例。对象...
    99+
    2024-02-22
    :类 对象 实例 属性 方法
  • 【JAVA】关于抽象类的概念
    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 前言 在Java中,抽象类是一种特殊的类,它无法被实例化。它只能被用作其他类的基类,以便子类可以继承它的属性和方法...
    99+
    2023-09-25
    java 开发语言
  • 详解Java中类与对象的关系
    目录前言一、类与对象的介绍二、类的实例化三.类与对象的使用方法3.1对象的初始化3.2内存显示图四.this的使用方法总结前言 已经开始类与对象的讲解了,正式步入了Java的道路了,...
    99+
    2023-05-19
    Java类 Java对象
  • java中抽象类和接口有什么不同
    今天就跟大家聊聊有关java中抽象类和接口有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数...
    99+
    2023-06-14
  • java中接口与抽象类有什么不同
    今天就跟大家聊聊有关java中接口与抽象类有什么不同,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。详解java中接口与抽象类的区别  1.abstract class 在 Java ...
    99+
    2023-05-30
    java
  • java声明抽象类的关键字是什么
    Java声明抽象类的关键字是"abstract"。在类的定义前面加上"abstract"关键...
    99+
    2023-09-25
    java
  • 什么是php抽象类和抽象方法
    这篇文章主要介绍“什么是php抽象类和抽象方法”,在日常操作中,相信很多人在什么是php抽象类和抽象方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是php抽象类和抽象方法”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-20
  • java接口和抽象类有什么区别
    Java接口和抽象类都是用来实现多态性的机制,但是它们有一些重要的区别:1. 实现方式:接口是通过实现关键字"implements"...
    99+
    2023-08-15
    java
  • Java如何实例化一个抽象类对象
    这篇文章主要介绍Java如何实例化一个抽象类对象,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Java 中抽象类是不能直接被实例化的。但是很多时候抽象类的该特点成为一个比较麻烦的阻碍。例如如果我想使用动态代理来给一...
    99+
    2023-05-30
    java
  • 一文详解Java抽象类到底有多抽象
    目录抽象类1.引出抽象类2.认识抽象类接口1.抽象类和接口的区别2.认识接口3.具体实现USB接口接口表示能力抽象类 1.引出抽象类 向上转型带来的最大的好处就是参数统一化,使用共同...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作