心得感悟
今天讲的内容真的很少了,但我还是花了很多时间才能理解。我一开始觉得抽象类能做到的,普通类也能做的,并不能理解抽象类的优点。后面多方查阅资料还有问同学,才明白原来抽象类如此便捷好用。了解了抽象类和接口的区别后,才发现原来它们这么相似,只要弄懂其中一个,肯定也能弄懂另一个。有的时候一个例子看不懂没关系,再多找点例子,总能看懂的。
1. 目的
- 一、掌握抽象类的概念及用法
- 二、掌握接口的概念及用法
2. 内容简概
- 一、抽象类的定义及用法
- 二、接口的定义及用法
- 三、抽象类和接口的区别
3. 具体内容
-
一、抽象类的定义及用法
1.概念:
抽象类是用来管理一些抽象内容的类。简单的说,使用了关键词abstract
声明的类叫作“抽象类”。其中用abstract
修饰的方法叫做“抽象方法”。抽象方法与一般方法的不同之处在于,抽象方法只对方法作出声明,但并没有具体的实现内容。
2. 定义规则:
(1) 抽象类和抽象方法必须用abstact
关键字来修饰。
(2)抽象方法定义时,只需要声明,不需要实现
(3)含抽象方法的类必须被声明为抽象类
(4)抽象类的子类必须实现所有的抽象方法后,才能被实例化,若不想实现抽象方法,就定义它为抽象类,否则会报错。
(5)不能被实例化。如下面这个例子,运行时会报错,抽象方法是不能被实例化的。
public class MyClass {
public static void main(String[] args){
Person xw = new Person();//实例化
}
}
abstract class Person{
String name;
public Person(String name){
this.name = name;
System.out.println(this.name);
public abstract void work();
}
如果非要用,只能通过使用匿名类来调用抽象类,且这样的调用只能使用一次。即将上面代码中的
Person xw = new Person();
改为如下代码,必须使用抽象类中的抽象方法。
Person xw = new Person(name:"小王"){
@Override
public void work() {};
}
3. 什么时候用到抽象类?
我举一个实际的例子,一个几何图形的类,它们都有一些相同的属性如:长、宽,都有周长、面积等方法,但是不同的图形有不同的计算周长、面积的公式,也就是说,同种方法有不同的实现代码,这时就需要用到抽象类和抽象方法。且抽象类和继承紧密相关,
4. 抽象类和抽象方法的具体用法
(1)首先,我们创建一个管理图形Shape
的抽象类
public abstract class Shape
{
public int width; //几何图形的长
public int height; //几何图形的宽
public Shape(int width,int height)
{
this.width = width;
this.height = height;
}
public abstract double area(); //定义抽象方法,计算面积
}
(2)然后定义一个正方形类,该类继承
Shape
类
public class Square extends Shape
{
public Square(int width,int height)
{
super(width,height);
}
//重写父类中的抽象方法,实现计算正方形面积的功能
@Override
public double area()
{
return width*height;
}
}
(3)再定义一个三角形类,该类同样继承
Shape
类
public class Triangle extends Shape
{
public Triangle(int width,int height)
{
super(width, height);
}
//重写父类中的抽象方法,实现计算三角形面积的功能
@Override
public double area()
{
return 0.5*width*height;
}
}
(4) 最后创建一个测试类,分别创建正方形类和三角形类的对象,并调用各类中的 area() 方法,打印出不同形状的几何图形的面积。
public class ShapeTest
{
public static void main(String[] args)
{
Square square = new Square(5,4); //创建正方形类对象
System.out.println("正方形的面积为:"+square.area());
Triangle triangle = new Triangle(2,5); //创建三角形类对象
System.out.println("三角形的面积为:"+triangle.area());
}
}
(5)运行结果如下:
正方形的面积为:20.0
三角形的面积为:5.0
-
二、接口的定义及用法
1. 概念:
接口(interface)就是定义一套方法/规则,用于对象之间的通信。有点类似于房屋中介或者USB,就是用于连通双方,并且规定以什么样的形式连通。比如房屋中介会制定好双方的见面时间,要求收取中介费等。而USB会规定两样电器间只能传输文件或者只能查看信息等。同样的,我们可以规定接口的方法。
2. 定义规则:
(1)可以定义内部类
(2)不能定义变量
(3)不能定义代码块
(4)不能添加普通/对象/实例方法
(5)不能定义构造方法,只有抽象方法
(6)使用implements实现一个接口
(7)默认的变量都是static final 常量
(8)一个类可以实现多个接口,一个接口可以继承多个接口
3. 什么时候用到接口?
就我目前的理解中,接口是面向对象时会用到的。比如手机的操作界面,当用户点击屏幕时,就需要一个接口来连通点击事件和被点击的应用软件。再比如手机通过数据线传输文件或者查看信息,接口用来连接传输者和手机,相当于数据线。
4. 接口的具体用法
(1)就上一点中的例子展开分析。首先,我们声明一个USB
接口,接口规定必须接口的两个对象必须实现read()和write()这两个方法。
interface USB{
//public abstract
void read();
//public abstract
void write();
}
(2)然后我们定义一个手机的类和电脑的类来实现这个USB接口,实现就是去用它。
class Computer implements USB{
@Override
public void read() {
System.out.println("电脑正在通过USB功能读取数据");
}
@Override
public void write() {
System.out.println("电脑正在通过USB功能写入数据");
}
}
class Phone implements USB{
@Override
public void read() {
System.out.println("手机正在通过USB功能读取数据");
}
@Override
public void write() {
System.out.println("手机正在通过USB功能写入数据");
}
}
(3)最后我们定义一个主类来看看运行效果
public class Test{
public static void main(String[] args){
Computer computer = new Computer();
computer.read();
computer.write();
Phone phone = new Phone();
phone.read();
phone.write();
}
}
(4)运行结果如下:
电脑正在通过USB功能读取数据
电脑正在通过USB功能写入数据
手机正在通过USB功能读取数据
手机正在通过USB功能写入数据
-
三、抽象类和接口的区别
抽象类和接口里面都有抽象方法,不知道你会不会有一种感觉,虽然它们的关键字不同,但感觉它们两个很相似。如果你对此感到困惑或者容易混淆二者,可以点击以下网页查看讲解,我认为这个网页中的讲解还是很清晰明了的。
4. 亲手练一练
1. 俗话说实践出真知,纸上谈兵不如亲自刀枪上阵,可以在下面的在线代码运行界面自己运行一下,还可以改改代码,便于加深理解。
(1)抽象类的用法
(2)接口的用法
网友评论