第一次写博客的记录
作为一名在校的CS蒟蒻,听闻写博客可以巩固自己的知识结构,记录自己的成长,何乐而不为腻!
由于之前做过刘汝佳的《算法竞赛入门经典》,结果卡到数组那一章就有点停滞不前了,毕竟里面的算法代码和思想对我来说还是蛮难的,还记得当时抓着书里面例题第一题研究了三四天,结果毫无进展。
呵呵呵,知道我发现了Java这门纯oop语言,丰富的类库,工具,最厉害的是虚拟机JVM当时一下子吸引了我。我在想,是谁创造了这么美丽的语言,詹姆斯·高斯林赛高。
由于之前Java里面的基础语法较多而且有些确实比较基础,恕我不多谈。
并且我的这些文章紧跟华东师范大学的Java核心技术,保持我自己的记忆能力。
关于Java的抽象类
关于抽象类的定义
首先
- 类是属性+方法(0或多个),按照我们学校老师所讲类就是指成员+实现这些成员的函数和方法
- PS:类可以没有方法,但是有方法就肯定要实现,这才能够是被实例化的完整的类,才能被new出来
- 因此到了我们的重点如果一个类它暂时有个方法没有被实现(感觉有点像C++里面虚函数的感觉,不知道说的恰不恰当),好比动物的吃好定义,用嘴巴吃,但是交配方式就不太好定义了,比如时间,过程方式不同,不太好直接定义出来的。那么作为类来说,如果类里面有一个方法没有定义,在Java中就需要被定义为抽象类abstract。
来写一个小代码来举个例子
public abstract class Shape{
int area;
public abstract void calArea();
}
其中因为calArea不知道是什么图形,因此无法表示出具体的方法,这时候就只能定义public abstract void,来个公有的抽象声明。
注意抽象类的特点
-
抽象类如果被继承,那么继承的类就不能继承其他类(包括抽象类)
遵循一夫一妻制 -
子类可以继承抽象类,但是一定要实现父类的所有abstract的方法,如果不能实现了,嘿嘿,那么你也要老老实实地变成抽象类
因此只有老老实实实现了父类的抽象方法,才能变成完整的类
我来写一个类来继承之前的Shape类
package rectangle;
abstract class Shape
{
int area;
public abstract void calArea();
}
public class Rectangle extends Shape
{
int width;
int length;
public Rectangle(int width,int length )
{
this.width=width;
this.length=length;
}
public void calArea()
{
System.out.println(this.width*this.length);
}
public static void main(String[] args)
{
Rectangle acer=new Rectangle(2, 3);
acer.calArea();
}
}
由于Rectangle(矩形)继承了抽象类Shape,因此必须要实现Shape中没有实现的calArea()方法才能作为一个完整的类
虽说有点照搬老师的源码,毕竟暑假在家,学习比较懒哈哈
关于Java的接口
- 我理解,只要抽象类的所有方法都没有实现,那么这个类就是一个接口,像是一个鸡蛋一样,抽象类包着接口
但是接口写的方式也就稍微有点不一样了
public interface Animal{
public void eat();
public void move();
}
- 但是接口不算类,或者说是特殊的“类”。和我第一点差不到哪边去
- 类只可以继承(extends)一个类,相当于我只可以有一个爸爸,与此同时它却可以实现(implements)多个接口,继承和实现可以同时实现,Java里面的优秀之处
- 接口也可以继承多个接口,没有实现的方法将会叠加
- 类一旦implements接口,那必须实现所有未实现的方法。如果没有全部实现方法,那么只能成为一个抽象类(和传染病一样)
- 接口里可以定义变量,但是一般是常量
总结
- 抽象类和接口相同点:两者都不能实例化,因此不能new操作,这个蛮重要的,如果你new一个抽象类和接口实例,是会出问题的
- 其他的就是书写方面的,抽象类定义abstract继承extends 接口定义interface实现implements
- 一个类继承extends一个(抽象)类,实现implements多个接口
- 接口可以继承extends多个接口,叠加就完事了
代码咱就先不码了,先玩一会,下次博客见