抽象类和接口

@Java入门基础
抽象类和接口
1.抽象类
当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现是无法确定的。
在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的类都是来描述对象的。如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。
Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰。

abstract void shout(); //定义抽象方法shout();

在定义抽象方法时需注意:

  • 抽象方法所在类必须是抽象类,但抽象类中可包含抽象方法;
  • 抽象类不可以被实例化
  • 抽象类必须由子类实现其抽象方法

下面通过一个例子实现抽象类中的方法:
Example1:

abstract class Animal{
	//定义抽象方法shout()
	abstract void shout();
}
//定义Dog类继承抽象类Animal
class Dog extends Animal{
	//实现抽象方法shout()
	void shout() {
		System.out .println("汪汪......");
	}
}
//定义测试类
public class EXample1 {
	public static void main(String[] args) {
		Dog dog = new Dog();//创建Dog类的实例对象
        dog.shout();//调用dog对象的shout()方法
	}
}

2.接口
如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方法来定义,即接口;在定义接口时,需要使用interface关键字来声明。
注意:

  • 接口不能实例化
  • 接口由其子类来实现其所有的抽象方法并实例化
  • 类名 +implement + 接口名

Example2:
类与接口之间的实现关系

interface Animal{
	void breathe();
	void run();
}
//定义Dog类继承抽象类Animal
class Dog implements Animal{
	//实现抽象方法breathe()
	public void breathe() {
		System.out .println("狗在呼吸");
	}
	//实现抽象方法run()
	public void run() {
		System.out .println("狗在跑");
	}
}
//定义测试类
public class Example2 {
	public static void main(String[] args) {
		Dog dog = new Dog();//创建Dog类的实例对象
        dog.breathe();//调用Dog类的breathe()方法
        dog.run();//调用Dog类的run()方法
	}
}

从例子中发现抽象方法并没有使用abstract关键字来修饰,这是因为接口中定义的方法和变量都包含一些默认修饰符;接口中定义的方法默认使用public abstract 来修饰,即抽象方法。接口中的变量默认用public static final 来修饰,即全局常量;
Example3:
接口与接口间的实现关系

interface Animal{
	void breathe();
	void run();
}
interface LandAnimal extends Animal{//接口继承接口
	void liveOnland();
}
//定义Dog类继承抽象类Animal
class Dog implements Animal{
	//实现抽象方法breathe()
	public void breathe() {
		System.out .println("狗在呼吸");
	}
	//实现抽象方法run()
	public void run() {
		System.out .println("狗在跑");
	}
	public void liveOnland() {
		System.out.println("狗生活在陆地上");
	}
}
//定义测试类
public class Example3 {
	public static void main(String[] args) {
		Dog dog = new Dog();//创建Dog类的实例对象
        dog.breathe();//调用Dog类的breathe()方法
        dog.run();//调用Dog类的run()方法
        dog.liveOnland();//调用Dog类的liveOnland()方法
	}
}

extends关键字和implements关键字用法区别

  • 表达继承的意思的时候用extends关键字 如:类名 + extends + 类名 ; 接口名 + extends + 接口名;
  • 表达实现的的意思时用implements关键字 如: 类实现接口 类名+ implements + 接口名;

接口特点归纳:

  • 接口中的方法都是抽象的,不能实例化对象
  • 当一个类实现接口时,如果这个类时抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
  • 一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开;
  • 一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。
  • 一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。先继承,再实现。
内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量指针中的应用规则,解释了不同型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序清理。 阅读建议:由于本资源涉及较多底层概念技术细节,建议读者先复习C语言基础知识,特别是指针内存管理部分。在学习过程中,可以尝试动手编写似的代码片段,以便更好地理解掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值