Java中的对象、类、抽象类、接口、继承之间的联系

正文:

举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成。

在动物中又分为两类:哺乳动物、卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示。

而哺乳动物可以继续划分为人、狗、猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示。

如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式。

然后每个学生或者每个工人都是具体的,那么就通过对象来表示;

由下面的图可知,所有的设计中,接口应该是最先被设计出来的,被子类所继承。

代码实例化:

package Java从入门到项目实战.抽象类与接口;
//动物
interface animal{
 public abstract String breathe();
}
//哺乳动物---接口继承extend
//类实现的话--implements
interface 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多个子类,不巧的是接口需要增加方法,那么每个子类都要覆写一遍新添的方法,想想都很恐怖;在此基础上增加了弥补的方法

5.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());
  }
 }
}

5.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;
 }
}

7.抽象类的构造方法

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());
 }
}

8.抽象类中定义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());
 }
}

9.模板设计模式

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);

 }
}

综合案例练习:

实现相关代码:

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中的对象、类、抽象类、接口、继承之间的联系的文章就介绍到这了,更多相关Java中的对象、类、抽象类、接口、继承之间的联系内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaWeb实体类转为json对象的实现方法

    1.创建个实体类 实体类User代码: package com.neuedu.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * Keafmd * * @ClassName: User * @Description: user实体类 * @author: 牛哄哄的柯南 * @date: 2020-12-

  • java创建子类对象设置并调用父类的变量操作

    通过子类调用父类的变量,有两种方法: 1.把父类的变量设置成public: package triangle.opengl.wlz.stu.childusefathervariable; import android.util.Log; public class BasePublicVariable { private String TAG = getClass().getName(); public int data; public void ptData(){ Log.d(TAG, "ptD

  • java中类和对象的知识点总结

    虽然说最近带着小伙伴们学了不少java中的知识点,但是对于最基本的概念,是每个小伙伴必不可少学习的要点.我们需要时时对它们进行复习和考察,才不会在后期结合其他的知识点而不会使用,下面小编就为大家带来java中类和对象的讲解,一起往下看看吧. 1.类和对象 类是一类对象的统称. 对象是这个类具体的一个实例. 基本语法为: class 类名{ //属性 //方法 } //例 class person{ public int age; public String name; public String

  • Java中的对象、类、抽象类、接口、继承之间的联系

    正文: 举个例子:如果现在要想定义一个动物,那么动物肯定是一个公共的标准,而这个公共标准就可以通过接口来完成. 在动物中又分为两类:哺乳动物.卵生动物,而这个标准属于对动物的标准进一步细化,应该称为子标准,所以此种关系可以使用接口的继承来表示. 而哺乳动物可以继续划分为人.狗.猫等不同的类型,由于这些类型不表示具体的事物标准,所以可以使用抽象类进行表示. 如果要表示出工人或者学生这样的概念,则肯定是一个具体的定义,则使用类的方式. 然后每个学生或者每个工人都是具体的,那么就通过对象来表示: 由下

  • java 中使用匿名类直接new接口详解及实例代码

    java:使用匿名类直接new接口 java中的匿名类有一个倍儿神奇的用法,见下面代码示例: package contract; public interface ISay { void sayHello(); } 上面是一个简单的接口,下面是如何使用: package jimmy; import contract.ISay; public class Program { public static void main(String[] args) { ISay say = new ISay()

  • 一文搞懂Java中的日期类

    目录 一.日期类 1.1 第一代日期类 1.2 第二代日期类Calendar 1.3 第三代日期类 一.日期类 在程序的开发中我们经常会遇到日期类型的操作,Java对日期类型的操作提供了很好的支持.在最初的版本下,java.lang包中的System.currentTimeMillis();可以获取当前时间与协调时间(UTC)1970年1月1日午夜之间的时间差(以毫秒为单位测量).我们往往通过调用该方法计算某段代码的耗时. public class TestTime { public stati

  • 详解java中的Collections类

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数组无法完全表达你要表达的东西,而定义一个类Class有太过麻烦,这时候,你可以考虑一下用Java中的Collections类.使用Collections类,必须在文件头声明import java.util.*; 一.动态.有序.可变大小的一维数组Vector与ArrayList  Collectio

  • 浅谈Java中的class类

    Class 类是在Java语言中定义一个特定类的实现.一个类的定义包含成员变量,成员方法,还有这个类实现的接口,以及这个类的父类.Class类的对象用于表示当前运行的 Java 应用程序中的类和接口. 比如:每个数组均属于一个 Class 类对象,所有具有相同元素类型和维数的数组共享一个Class 对象.基本的 Java 类型(boolean, byte, char, short,int, long, float 和 double) 和 void 类型也可表示为 Class 对象. 以下示例使用

  • 详解java中面向对象设计模式类与类的关系

    前言 在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖.关联.聚合.组合.继承.实现.他们的耦合度依次增强. 1. 依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系.定义比较晦涩难懂,但在java中的表现还是比较直观的:类A当中使用了类B,其中类B是作为类A的方法参数.方法中的局部变量.或者静态方法调用.类上面的图例中:People类依赖于Bo

  • java中同类对象之间的compareTo()和compare()方法对比分析

    首先我们都知道java中的比较都是同一类对象与对象之间的比较,就好像现实生活中比较人和人的年龄一样,你不会去把人的年龄和人的身高来比较,这显然是没有意义的. java中同类对象之间的比较又分为两种,基本类型之间的比较和引用类型之间的比较. java中"=="比较对象是否引用了同一个对象,或者比较基本类型变量值是否相等.Object类的equals()方法用来比较是否一个对象(内存地址比较),可以重写. JDK中有些类重写了equals()方法,只要类型.内容都相同,就认为相等.很变态的

  • java中abstract修改类的实例方法

    abstract是一种修饰类,经过修改的类会变成抽象类.除了类之外还可以修改方法,考虑到类的模块是小伙伴们常接触的,今天来小编带大家一起找寻使用abstract修改类的方法.这里需要我们先从abstract丁酉.特点.方法.注释进行学习,然后在实例中体会修改类的用法. 1.abstract定义 abstract关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. 2.特点 可以声明引用不能创建

  • 一文带你了解Java中的Object类及类中方法

    目录 1. Object类介绍 2. 重写toString方法打印对象 3. 对象比较equals方法 4. hashCode方法 1. Object类介绍 Object是Java默认提供的一个类.Java里面除了Object类,所有的类都是存在继承关系的.默认会继承Object父 类.即所有类的对象都可以使用Object的引用进行接收. 范例:使用Object接收所有类的对象 class Person{} class Student{} public class Test { public s

  • Java中的Comparable和Comparator接口

    目录 一. Comparable接口 1. Comparable简介 2. 为什么要实现Comparable接口 3. Comparable的实际应用 二. Comparator接口 1. Comparator简介 2. Comparator接口的实际运用 三. Comparable和Comparator的比较 一. Comparable接口 1. Comparable简介 Comparable是排序接口. 若一个类实现了Comparable接口,就意味着该类支持排序. 实现了Comparabl

随机推荐