首页 > 编程知识 正文

抽象属性,java抽象类的作用

时间:2023-05-05 19:12:10 阅读:177055 作者:3484

基础部分的说明基本结束了。 从今天开始进入Java提升篇的部分。 这个部分的内容比之前的内容要复杂得多。 不明白的地方可以多次看,请做好这样的觉悟。 还不能理解的部分一定是我说话不生动。 我记得用信息提醒我。

是的,我没有时间。 快上车吧。

本文主要描述Java的抽象类。 抽象类是什么? 正如名字所示。 是非常“抽象”的类。 抽象是具体的代词。 就像上司对你说的,大家都说努力工作、努力工作就能涨工资,很多时候只是不说就很抽象。 (2333 ),说实话,是有抽象方法的类。 抽象的方法是什么? 是具有abstract关键字限定的方法,抽象方法并不是只通过声明来实现的,只能由子类继承来实现。 说了这么多,还是举个栗比较好:

//*

* @author Frank

* @create 2017/11/21

* @description

*/

公共适配器类指南{

abstract void print (;

}

这里也使用了Goods类,声明了抽象的商品类。 可以看出那里有用abstract关键字修饰的方法print。 因此,此方法是抽象方法。 具有抽象方法的Goods类也必须成为抽象类,并使用abstract关键字进行限定。

抽象类与普通类几乎相同,但不能实例化抽象类。

你可能会想,无法实例化的类带来了什么? 这个不知道吧。 很明显,抽象类是为了继承而产生的,继承了抽象类的非抽象类必须实现父类的抽象方法。 否则只能定义为抽象类。 那样有什么好处呢? 在这里设定一个剧本。 那是商品信息展示。 需要输出各商品的说明信息,例如标题、价格等各种参数。 其中的一部分参数并不是所有的商品都是通用的。 例如,画面尺寸、续航时间。 先得到商品的各项信息,再统一打印显然不容易,所以把这个打印的事情交给子类吧。 父类只需要声明一个抽象类。 这就相当于父亲给儿子一个任务:“继承我的财产,你们必须先完成这些任务。”

Goods等级下有手机、电视、电脑等商品,再定义三个等级,全部继承Goods等级,即可实现商品的统一管理。

公共类phone extends goods {

//手机类的输出

@Override

void print () }

system.out.println('phoneprint.' );

}

}

publicclasscomputerextendsgoods {

//计算机系统输出

@Override

void print () }

system.out.println (' computer print.' );

}

}

publicclasstelevisionextendsgoods {

//电视系统输出

@Override

void print () }

system.out.println (' television print.' );

}

}

定义了三个类。 接下来我们来测试一下:

公共类测试{

publicstaticvoidmain (string [ ] args ) {

Goods[] goodsList=new Goods[3];

goodsList[0]=new Phone (;

goodsList[1]=new Computer (;

goodsList[2]=new Television (;

谷歌:谷歌列表(for ) )。

g.print (;

}

}

输出如下。

手机打印。

计算机打印。

电话打印。

这一幕似乎很相似,还记得之前的继承和多态性的板栗吗? 嗯,是的抽象类与普通类相似。 继承的区别在于非抽象子类必须实现抽象父类的抽象方法,而普通父类则不需要。

也就是说,抽象类是对某一类事物的抽象,虽然在多个类中出现相同的功能,但是主体不同的话,上面的板栗、手机、电脑、电视这样的商品需要打印信息,因为它们有共同的属性,所以是用于统一管理这些商品输出信息的商品

现在,让我们上面的栗子变得完美,不要看起来像鸡肋。 抽象类定义公共属性和方法(如title和price ),并定义每个子类特有的属性和方法。

package com.frank.abstractclass;

//*

* @author Fran

k

* @create 2017/11/21

* @description

*/

public abstract class Goods {

//定义各个类共有的属性

private String title;

private Double price;

//定义构造器

public Goods(String title, Double price) {

this.title = title;

this.price = price;

}

//定义设置器和访问器

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public Double getPrice() {

return price;

}

public void setPrice(Double price) {

this.price = price;

}

//声明抽象打印方法

abstract void print();

}

ackage com.frank.abstractclass;

/**

* @author Frank

* @create 2017/11/21

* @description

*/

public class Phone extends Goods {

//定义私有的属性

private Double screenSize;//屏幕大小

private Double batteryLife;//续航时间

//重载构造器

public Phone(String title, Double price,Double screenSize,Double batteryLife) {

super(title, price);

this.screenSize = screenSize;

this.batteryLife = batteryLife;

}

//定义子类特有的方法

public Double getScreenSize() {

return screenSize;

}

public void setScreenSize(Double screenSize) {

this.screenSize = screenSize;

}

public Double getBatteryLife() {

return batteryLife;

}

public void setBatteryLife(Double batteryLife) {

this.batteryLife = batteryLife;

}

//手机类输出

@Override

void print() {

System.out.println("Phone print------");

System.out.println("Title:"+getTitle());

System.out.println("Price:$"+getPrice());

System.out.println("ScreenSize:"+getScreenSize()+" inches");

System.out.println("BatteryLife:"+getBatteryLife()+" h");

}

}

package com.frank.abstractclass;

/**

* @author Frank

* @create 2017/11/21

* @description

*/

public class Television extends Goods {

//定义子类特有属性

private Double screenSize;//屏幕尺寸

private String resolution;//分辨率

//重载构造器

public Television(String title, Double price, Double screenSize, String resolution) {

super(title, price);

this.screenSize = screenSize;

this.resolution = resolution;

}

public Double getScreenSize() {

return screenSize;

}

public void setScreenSize(Double screenSize) {

this.screenSize = screenSize;

}

public String getResolution() {

return resolution;

}

public void setResolution(String resolution) {

this.resolution = resolution;

}

//电视机类输出

@Override

void print() {

System.out.println("Television print------");

System.out.println("Title:"+getTitle());

System.out.println("Price:$"+getPrice());

System.out.println("ScreenSize:"+getScreenSize()+" inches");

System.out.println("Resolution:"+getResolution());

}

}

接下来测试一下:

package com.frank.abstractclass;

/**

* @author Frank

* @create 2017/11/21

* @description

*/

public class Test {

public static void main(String[] args) {

Goods[] goodsList = new Goods[3];

goodsList[0] = new Phone("IphoneX",9688.00,5.8,24.0);

goodsList[1] = new Computer("Alienware15C-R2738",17699.00,"i7-7700HQ","GTX1060");

goodsList[2] = new Television("SAMSUNG UA78KU6900JXXZ",21999.00,78.0,"4K");

for (Goods g:goodsList)

g.print();

}

}

输出如下:

Phone print------

Title:IphoneX

Price:$9688.0

ScreenSize:5.8inches

BatteryLife:24.0h

Computer print------

Title:Alienware15C-R2738

Price:$17699.0

CPU:i7-7700HQ

GraphicsCard:GTX1060

Television print------

Title:SAMSUNG UA78KU6900JXXZ

Price:$21999.0

ScreenSize:78.0inches

Resolution:4K

想必现在对于抽象类有了更好的理解了吧。

现在做一个小小的总结:

1,抽象方法一定在抽象类中。

2,抽象方法和抽象类都必须被abstract关键字修饰。

3,抽象类不可以用new创建对象,因为存在抽象方法,抽象方法没有具体实现,无法执行。

4,抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。

至此,抽象类讲解完毕,欢迎大家继续关注!

以上就是深入理解Java抽象类的详细内容,更多关于Java抽象类的资料请关注脚本之家其它相关文章!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。