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

类与对象:抽象类、Object类和内部类

一.抽象类

1.概念

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

2.语法规则

使用abstract来修饰抽象类,例子:

Shape shape=new Shape();   //代码会报错


 

public abstract class Shape {public abstract void draw();
}


3.特性

3.1 在抽象类里的抽象方法可以没有具体实现,但抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类;
3.2 如果一个类中有抽象方法,那么这个类必须是抽象类;

public abstract class Shape {public abstract void draw();
}
//还是刚刚的例子


3.3 抽象类不可以实例化;

Shape shape=new Shape();   //代码会报错


3.4 抽象方法不能被final和static修饰,抽象方法也不是private的。

二.Object类

1.概念

Object是Java默认提供的一个类。Object类是Java中所有类的父类。

2.类中的方法

方法描述
protected Object clone()创建并返回一个对象的拷贝
boolean equals(Object obj)比较两个对象是否相等
protected void finalize()当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
Class<?>getClass()获取对象的运行时对象的类
int hashCode()获取对象的 hash 值
void notify()唤醒在该对象上等待的某个线程
void notify All()唤醒在该对象上等待的所有线程
String toString返回对象的字符串表示形式
void wait()让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
void wait(long timeout)让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
void wait(long timeout,int nanos)与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。

三.内部类

1.概念

一个类中嵌套了另一个类,例子:

public class OutClass {class InnerClass{}
}

注意:内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件。

2.内部类的分类

2.1 实例内部类

2.1.1 创建

未被static修饰的成员内部类

public class OutClass {class InnerClass{}
}
public static void main(String[] args) {// 创建实例内部类对象OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();//也可以先将外部类对象先创建出来,然后再创建实例内部类对象OutClass outClass = new OutClass();OutClass.InnerClass innerClass2 = outClass.new InnerClass();
}
2.1.2 注意事项

1. 外部类中的任何成员都可以在实例内部类方法中直接访问;
2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private等访问限定符的约束;
3. 在实例内部类方法中访问同名的成员时,优先访问自己的,如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问;

OutClass.this.InnerClass.XX


4. 实例内部类对象必须在先有外部类对象前提下才能创建;
5. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。

2.静态内部类

2.2.1 创建

被static修饰的内部成员类称为静态内部类。

public class OutClass{static class InnerClass{}
}
public static void main(String[] args) {// 静态内部类对象创建 & 成员访问OutClass.InnerClass innerClass = new OutClass.InnerClass();innerClass.methodInner();
}
2.2.2 注意事项

1. 在静态内部类中只能访问外部类中的静态成员;

2. 创建静态内部类对象时,不需要先创建外部类对象。


3.局部内部类

2.3.1 创建

定义在方法中的类,基本不用

public class OutClass {public void method(){class InnerClass{}}
}

2.3.2 注意事项

1. 局部内部类只能在所定义的方法体内部使用;

2. 不能被public、static等修饰符修饰;

4.匿名内部类

class Out {public void test() {}
}

相关文章:

  • 数据库多表查询概述——三种实现方式
  • 【学习笔记】关于建模时需要调整的变量
  • 使用Python生成一束玫瑰花
  • Python采集安居客租房信息
  • CAD2023 2024 2025以上版本出现无法运行 AutoCAD,原因可能如下1) 此版本的 AutoCAD 安装不正确
  • 第十五届“北斗杯”全国青少年空天科技体验与创新大赛安徽赛区阜阳市解读会议
  • FreeRTOS_互斥量_学习笔记
  • php 连接sqlserver步骤
  • 无网环境禁止 WPS 提示登录,且基本功能按钮可用
  • HQL面试题练习 —— 品牌营销活动天数
  • 运维的发展前景,会被AI取代吗?
  • python的requests爬虫模块使用代理ip方法---集合
  • python 庆余年2收视率数据分析与可视化
  • VUE3+TS+elementplus创建table,纯前端的table
  • Leaflet【二】图层绘制——UI图层【点线面】 矢量图层【img、svg】
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • es6
  • ES6 ...操作符
  • ES6系统学习----从Apollo Client看解构赋值
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java基本数据类型之Number
  • RxJS: 简单入门
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于List、List?、ListObject的区别
  • 人脸识别最新开发经验demo
  • 应用生命周期终极 DevOps 工具包
  • 中文输入法与React文本输入框的问题与解决方案
  • $.proxy和$.extend
  • (3)STL算法之搜索
  • (4)(4.6) Triducer
  • (办公)springboot配置aop处理请求.
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (三)终结任务
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • .Net Core 中间件与过滤器
  • .Net Web窗口页属性
  • .NET实现之(自动更新)
  • .Net中wcf服务生成及调用
  • :中兴通讯为何成功
  • [ Linux ] Linux信号概述 信号的产生
  • [22]. 括号生成
  • [C#]使用OpenCvSharp图像滤波中值滤波均值滤波高通滤波双边滤波锐化滤波自定义滤波
  • [C/C++]数据结构----顺序表的实现(增删查改)
  • [C++]unordered系列关联式容器
  • [Cloud Networking] Layer 2
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [HDOJ4911]Inversion
  • [IE编程] 多页面基于IE内核浏览器的代码示例
  • [J2ME]如何替换Google Map静态地图自带的Marker
  • [java后端研发]——文件上传与下载(2种方式)
  • [JS]数据类型
  • [LeetCode]: 145: Binary Tree Postorder Traversal