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

Java核心概念:抽象类、接口、Object类深度剖析

Java核心概念:抽象类、接口、Object类深度剖析

    • 1.抽象类
      • 1.1啥是抽象类?
      • 1.2抽象类的特性
      • 1.3如何使用抽象类呢?
      • 1.4抽象类的作用
    • 2.接口
      • 2.1接口的声明
      • 2.2接口的使用
      • 2.3接口的特性
      • 2.4实现多个接口
      • 2.5接口间的继承
    • 3.Object类
      • 3.1初步了解Object类
      • 3.2获取对象信息

1.抽象类

1.1啥是抽象类?

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有足够的信息来描绘一个具体的对象,这样的类就是抽象类。

像这样的Animal类一般只为服务创建Dog类和Cat类的,我们就可以直接定义为抽象类(abstract class),以及animal类的bark()方法我们通常不调用,所以我们同样可以写为抽象方法(abstract function)

像这样子的抽象类和抽象方法就是为了让子类去重写再描述具体对象而产生的。

并且我们同样合理的利用编译器的语法规则去校验我们的代码,以防错误的创建和访问。

1.2抽象类的特性

注意:

1.抽象类不能直接实例化对象,但其他功能和普通类仍然一样

2.抽象类必须被继承

3.抽象方法不能是private的

4.抽象方法不能被final和static修饰,因为抽象方法要被子类重写

5.抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须使用abstract修饰

6.抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

7.抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量

1.3如何使用抽象类呢?

我们依旧拿Animal举例哈(问就是想象力匮乏…

public abstract class Animal {public abstract void bark();
}//是在不同文件哈
public class Dog extends Animal//记得要重写抽象方法哈public void bark(){System.out.println("在汪汪汪");}
}

1.4抽象类的作用

经过上面的学习,我们可以知道抽象类就是为了给定子类一个大的框架,保证后面的子类根据抽象类做更多定义。

记住哈,抽象类本身不能被实例化,要想使用,只能创建该抽象类的子类,然后让子类重写抽象类中的抽象方法。

另外呢,我想说,我们使用抽象类的意义就是为了多一重编译器的校验,尽管普通类就足够,但既然有这样的语法,我们就应该按照规范去完成啦😊

2.接口

2.1接口的声明

public interface [接口名称]{public void method();
}

注意:

1.创建接口时,接口的命名一般以大写字母I开头

2.接口的命名一般使用“形容词”词性的单词

3.接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字

4.接口中的方法都是共有的

2.2接口的使用

接口必须要通过一个“实现类”来实现该接口,并且要实现接口中的所有方法;否则,类必须声明为抽象的类。

eg:(这是两个文件

public interface Iaction{void eat();void walk();void sleep();...
}public class Dog implements Iaction{@Overridepublic void eat() {}@Overridepublic void walk() {}@Overridepublic void sleep() {}
}

1.子类与父类之间是extends继承关系,类与接口之间是implements实现关系

2.这两种关系可以同时作用

3.继承不能多继承,但一个类可以同时实现多个接口

2.3接口的特性

1.接口当中的成员变量,默认是public static final修饰的(只能是public,用private会编译报错)

2.接口当中的抽象方法,默认都是public abstract修饰的(只能是噢、public abstract,其他修饰符都会报错)

3.如果接口当中的方法被default修饰,那么可以有具体的实现

default void test(){
System.out.println("default method");

4.如果接口当中的方法被static修饰,那么可以有具体的实现

static void test(){
System.out.println("static method");

5.接口是不可以进行实例化的

6.类和接口之间可以使用关键字implements来实现接口

7.一个接口对应一个字节码文件

8.接口中不能有静态代码块和构造方法

9.如果类中没有实现接口中的所有方法,则类必须设置为抽象类

2.4实现多个接口

实现接口不像继承类一样,它可以多个实现,比如下面

public class Animal implements Iwalk,Iswim,Ieat{}

注意:

通常我们用抽象类或父类实现接口的时候,所实现的接口一定要有共性,如walk,eat一些动物都会的…

另外,一个类实现多个接口时,每个接口中的抽象方法都要实现,否则类必须设置为抽象类。

提示,IDEA中使用 ctrl + i 可以快速实现接口

因此我们可以这样去理解,继承表达的含义是is-a语义,而接口表达的含义是具有xxx特性

猫是一种动物,具有会跑的特性

青蛙也是一种动物,既能跑,也能游泳

这样的话,我们可以不用父类实现所有接口,只需要每一个动物类去单独实现该有的特性,然后在运行类这样写,再在main方法中像这样去调用即可

public class Test {public static void walk(IWalk iwalk){iwalk.walk();}public static void main(String[] args) {Dog dog = new Dog("PaPy Dog",3);Test.walk(dog);Test.walk(new Dog("dog",2));	//匿名对象同样也行}
}

但是如果该具体动物类没有实现对应接口,那么就会报错

2.5接口间的继承

interface IA{public void ia();
}
interface IB{public void ib();
}
interface IC extends IA,IB{public void ic();
}

但我们去实现接口IC的时候,要重写IC所继承的所有方法,以及它本身的方法。

即 要重写ia,ib,ic三个方法

接口间的继承相当于把多个接口合并在一起

3.Object类

3.1初步了解Object类

首先,我们要知道Object类是Java默认提供的一个类,Java里除了Object类,所有的类都是存在继承关系的。默认继承Object父类。即所有类的对象都可以使用Object的引用进攻接收。

eg:我们用Object接受所有类的对象

class Dog{}
class Cat{}public class Test {public static void main(String[] args) {Object obj1 = new Dog("dog",2);Object obj2 = new Cat("cat",2);}
}

也就是说都可以向上转型

所以在开发中,Object类是参数的最高统一类型。但Object类也有定义好的一些方法。我们主要关注hashCode(),equal(),toString()这几个方法即可

3.2获取对象信息

打印对象信息,我们可以直接重写或直接调用Object类的toString方法

// Object类中的toString()方法实现:
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}//重写的toString
@Overridepublic String toString() {return "Dog{" +"name='" + name + '\'' +", age=" + age +'}';}Object obj = new Dog("dog",2);System.out.println(obj.toString());  //这样调用即可

以上是我关于Java的笔记分享,也可以关注关注我的静态网站🥰

感谢你读到这里,这也是我学习路上的一个小小记录。希望以后回头看时,能看到自己的成长~

http://www.dtcms.com/a/497013.html

相关文章:

  • 广西城乡与住房建设厅网站昆山网站建设公司哪家好
  • 正规网站制作价格跨境电商平台建设方案
  • 网站seo优化排名红河网页设计
  • Linux osq_lock(二)
  • 烟台电商网站建设济宁百度网站建设
  • wordpress图片添加标签无锡seo公司
  • 革吉网站建设网站开发建
  • 科研新手如何建立规范的图片处理习惯?
  • Swift中.gesture的用法
  • 厦门企业自助建站系统建站软件可以不通过网络建设吗
  • 电商建网站运营襄阳网站建设公司哪家好
  • 网站建设的培训心得万维网网站注册
  • 网站左侧边栏导航代码企业计划书
  • 歙县建设银行网站成都行业网站
  • 整体设计 逻辑系统程序 之33 程序定稿 PIN 语言工具设计需求与交付方案
  • 江门网站推广技巧wordpress获取tag名称
  • 湘潭哪里做网站 电话阿里巴巴的电子商务网站建设
  • Qwen3VL源码侧改进点及DeepStack核心思想概述
  • 设计一个商务网站专做ppt的网站
  • OLTP与OLAP:数据处理世界的双生花
  • 廊坊网站建设兼职糖果果屋网站建设规划书
  • 三乡网站开发莱芜半岛
  • 查网站是什么公司做的全国装饰公司最新排行榜
  • 【大模型备案】全国有439个大模型通过生成式人工智能大模型备案!
  • 介绍 一下 [特殊字符] 代数
  • 公司付的网站费怎么做分录php的网站有哪些
  • Ollama 新动作,联网搜索、MCP、云端大模型,更强了
  • 怎样做服装网站用dw做音乐网站模板
  • 电影新网站如何做seo优化wordpress不显示引用图片不显示
  • 学校网站建设流程360建筑网电脑版