Java面向对象之抽象方法抽象类、接口的使用

2023-05-16

一、抽象

1、简单说明

  • 只是声明,并不去实现
  • 抽象方法:public abstract void act();,没有方法体,直接结束,抽象方法只能存在于抽象类中。
  • 抽象类:public abstract class Test{},继承抽象类的子类必须重写父类中的方法(包括抽象方法),否则子类也必须是抽象类。

2、注意事项
(1)可以用于强制要求子类中必须有哪些方法,因为必须重写抽象父类的方法。
(2)抽象类不能实例化其他类的对象。
(3)不过,抽象类中可以有正常的方法,不一定都是抽象方法。

3、测试练习

  • 在抽象类中实例化对象报错:
    1.3.1
  • 在继承了抽象类的普通子类中实例化对象不会报错:
abstract class Test06_Father{  //定义一个抽象类 
	//final常量
	final int height = 180;
	
	//在抽象类中定义抽象方法(抽象方法只能存在于抽象类中)
	public abstract void act0();
	//在抽象类中定义普通方法
	public void act1(){}
	public void act2(){}
	
	//在抽象类中实例化对象:会报错
	// Test06_Father tf = new Test06_Father();
}

public class Test06_Son extends Test06_Father{  //子类继承一个抽象类
	//在继承了抽象类的子类中必须重写的父类方法
	public void act0(){
		System.out.println("第零次重写抽象方法……");
	}
	public void act1(){
		System.out.println("第一次重写普通方法……");
	}
	public void act2(){
		System.out.println("第二次重写普通方法……");
	}

	//在继承了抽象类的子类中定义正常执行的方法
	public void speeking(){
		System.out.println("我是不会变心的!!!");
	}

	//在子类中定义主方法
	public static void main(String[] args){
		//重新定义变量可以
		int height = 99;  
		
		//在继承了抽象类的普通子类中实例化对象:不会报错
		Test06_Son ts = new Test06_Son();  
		ts.act0();
		ts.act1();
		ts.act2();
		ts.speeking();  //调用对象中的方法
	}
}

1.3.2

二、接口

1、简单说明

  • 接口实际上是一种特殊的抽象类,里面所有内容都是公开的。
  • 接口中所有的方法都是抽象方法(不可以有普通的方法),就相当于用抽象方法占个位。
  • 使用interface来声明一个接口,在接口中定义抽象方法时可以不使用abstract。

2、注意事项
(1)接口中定义的属性必须是public static final的,而接口中定义的方法则
必须是public abstract的,因此这些修饰符可以部分或全部省略;

(2)接口中定义的属性的值在实现类中不能被更改;

(3)一个类只能实现某个接口,不能继承某个接口;但接口可以继承接口
接口不但可以继承接口,而且可以继承多个接口,即接口允许多继承;

(4)如果一个类只重写(实现)了一个接口的部分方法,则该类必须的声明为抽象类,否则就必须重写(实现)继承的接口中所有的抽象方法;

(5)一个类可以在继承一个父类的同时实现一个或多个接口,但extends关键字必须的在implements(实现)之前;

(6)不可以new接口对象,但可以定义–个接口引用类型的变量并将其指向
实现接口的对象,达到多态的目的。

3、测试练习

interface Test06_Valuable{  //定义一个接口(特殊类)
	//在接口中定义抽象方法:不需要使用abstract
	void getMoney();
}
class Test06_Gold implements Test06_Valuable{  //继承(实现)了接口的一个接口
	//在继承了接口的接口中必须重写(实现)父类的抽象方法(加个public提高访问权限)
	public void getMoney(){
		System.out.println("是金子总是值钱的!");
	}
}
public class Test06_Son{  //定义主方法的类
	public static void main(String[] args){
		Test06_Gold go = new Test06_Gold();  //实例化子接口对象
		go.getMoney();  //调用子接口对象中的方法
		
		//接口同样具有多态性
		Test06_Valuable tv = new Test06_Gold();  //向上赋值
		tv.getMoney(); 
	}
}

2.3.1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java面向对象之抽象方法抽象类、接口的使用 的相关文章

  • Java Swing 应用程序消息对话框帮助

    我正在开发 Java Swing 应用程序 我需要创建一个如图所示的对话框 我不知道这个的名字 我无法解释 所以我附上一张照片 请告诉我这叫什么以及如何在我的 GUI 应用程序中创建它 给猫剥皮的方法不止一种 public final cl
  • 我在使用 JavaFX 绘制十字时遇到问题

    我正在尝试编写代码 在网格上对角绘制 3 个形状 前两个形状是正方形和圆形 我能做到 然而 第三种形状让我有些悲伤 我应该画一个十字 T 版本 而不是 X 每次我写出代码时 它看起来就像一个侧面 我知道我只是错过了一些简单的东西 但我真的很
  • 检查从 arrayadapter 获取的复选框

    我有标题清单 CheckBox 我想控制默认检查哪一个 所以我试图获得正确的视图并检查它 但由于某种原因它不起作用 知道为什么吗 form checkbox item xml
  • 仅使用公钥在 HD 钱包中生成以太坊地址 (bitcoinj/web3j)

    我尝试为使用 bitcoinj 库实现的 HD 钱包密钥生成以太坊地址 但我感到困惑 DeterministicSeed seed new DeterministicSeed some seed code here null 1409478
  • 如何将完整的日期格式拆分为日期和时间?

    我有很多格式为我的示例所示的字符串 我必须解析它们 我正在尝试确定今天是哪根弦 我的问题是 时间快到了 我只需要比较那个日期 接下来我想检查时间是否在 after 和 before 的两个时间戳 HH mm ss 之间 但存在问题 日期几乎
  • 如何将日期字符串解析为Date? [复制]

    这个问题在这里已经有答案了 如何将下面的日期字符串解析为Date object String target Thu Sep 28 20 29 30 JST 2000 DateFormat df new SimpleDateFormat E
  • Android:TelephonyManager 类

    我不明白为什么 API 文档中这么写TelephonyManager类是public 但是当我尝试创建一个实例时 它说它不是公共类 并且无法从包中访问 我看到它也说使用Context getSystemService Context TEL
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • 我可以使用 Selenium Webdriver 测试元素的顺序吗?

    有一个表单 其中有 3 个字段 具有 3 个不同的 ID fieldset div div fieldset
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • Java ArrayList 和 HashMap 动态

    有人可以提供一个创建Java的例子吗ArrayList and HashMap在飞行中 所以而不是做一个add or put 实际上在类实例化时为数组 哈希提供种子数据 举个例子 类似于 PHP 的例子 array array 3 1 2
  • 将 Maven 控制台与 m2eclipse 一起使用

    Maven 新手在这里 有没有办法在 Eclipse 中打开控制台并在 M2Eclipse 插件上执行 Maven 命令 这是一个非常好的插件 但我环顾四周 没有找到我想要的一些功能 谢谢 如果你想运行特定的maven插件 你可以这样做 g
  • IntelliJ - 无效源版本:17

    我已经在 IntelliJ 中使用 Gradle 创建了一个使用 Java 17 的新 Java 项目 运行我的应用程序时出现错误Cause error invalid source release 17 我的设置 我已经安装了openjd
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • 短 2 个字节

    我正在从串行端口读取一个长度为 133 字节的数据包 最后 2 个字节包含 CRC 值 我使用 Java 将 2 个字节值制成单个 我认为很短 这就是我所做的 short high 48 0x00ff short low 80 short
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 没有运算符与给定名称和参数类型匹配。您可能需要添加显式类型转换。 -- Netbeans、Postgresql 8.4 和 Glassfish

    我正在尝试使用 EclipseLink 在 Glassfish 中使用 JPA 编辑 Postgresql 中的表 当我插入一个实体时 它运行良好 但是 当我尝试编辑或删除同一实体时 它失败并出现以下错误 任何想法 Caused by Ex
  • 背景图像隐藏其他组件,例如按钮标签等,反之亦然

    如何解决此代码中组件的隐藏问题 代码运行没有错误 但背景图片不显示 如何更改代码以获取背景图像 使用验证方法时 它在validation 中创建错误 public class TEST public TEST String strm Jan
  • Java有没有类似微软CHESS的工具?

    是否有类似于 Microsoft 的现有 Java 工具CHESS http research microsoft com chess 或者 CHESS 源代码是否开放 以便我可以尝试将其转换为 Java 谷歌的织线工 http code

随机推荐