面向对象程序设计基础(三)--抽象类--电脑管理

Java 抽象类

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

抽象方法

如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。

Abstract 关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。

抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。

抽象类总结规定

1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

例题

一、面向对象程序设计基础(70分) 命名App1.java
要求:(1)按照题目所给变量名称、类型和方法名称进行编程,禁止修改;
(2)本题中所有内容写在源文件App1.java中。
(3)编程环境可选,Eclipse和JDK均可。
1、定义抽象的存储类(Storage)
成员变量:
品牌(brand) String类型 如:“希捷、华硕等”
型号(type) String类型 如:STDR2000307等
所有者(owner) String类型 默认为考生的学号和姓名,如:201809254王伟
静态变量(num) int类型 记录创建的对象个数
构造方法:
构造方法(1),通过形参初始化名称(brand)。
构造方法(2),通过形参初始化所有成员变量(要求调用构造方法(1))。
普通方法:
getType( ),返回型号。
show(),用于输出所有成员变量的值。
void compare(Storage),用于比较两个对象是否相等。
静态方法:
static void count()用于输出创建的对象个数。
2、通过main方法测试
(1)创建两个Storage对象stor1、stor2,判断这两个对象是否相等。
(2)分别调用show()输出两个对象。

代码:

package 大二;

//定义抽象的存储类
abstract class Storage{
    
    
	protected String brand;
	protected String type;
	protected String owner;
	private static int num;
	//构造方法一
	public Storage(String xm){
    
    
		brand = xm;
	}
	//构造方法二
	public Storage(String xm,String type,String owner,int num) {
    
    
		this(xm);
		this.type=type;
		this.owner=owner;
		this.num = num;
	}
	//普通方法
	// 返回型号
	abstract public String getType();	//声明抽象方法
	//输出所有成员变量的值
	abstract public void show();		//声明抽象方法
	//比较两个对象是否相等
	abstract public void compare(Storage stor);		// 声明抽象方法
	//静态方法
	//用于输出创建的对象个数
	public static void count() {
    
    
		System.out.println("创建的对象个数:"+num);
	}
}
//定义继承自Storage的子类compute
class compute extends Storage {
    
    
	//构造方法
	public compute(String xm, String type, String owner, int num) {
    
    
		super(xm, type, owner, num);
		// TODO Auto-generated constructor stub
	}
	//构造方法
	public compute(String xm) {
    
    
		super(xm);
		// TODO Auto-generated constructor stub
	}
	//实现抽象类中的getType方法
	@Override
	public String getType() {
    
    
		// TODO Auto-generated method stub
		return brand;
	}
	//实现抽象类重的show方法
	public void show() {
    
    
		// TODO Auto-generated method stub
		System.out.println("品牌:"+brand);
		System.out.println("型号:"+type);
		System.out.println("所有者:"+owner);
	}
	//实现抽象类中的compare方法
	public void compare(Storage stor) {
    
    
		// TODO Auto-generated method stub
		if (this.owner == stor.owner)System.out.println("这两个对象相等");
		else System.out.println("这两个对象不相等");
	}
};

//定义主类
public class App1 {
    
    
	public static void main(String[] args) {
    
    
		Storage stor1 = new compute("神州","STDR2000307","20191544119胡超",1);		//声明父类对象stor1,指向子类对象
		Storage stor2 = new compute("华硕","STDR2000308","20191544118giao凯",2);	//声明父类对象stor2,指向子类对象
		stor1.compare(stor2);
		stor1.show();
		stor2.show();
	}
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45696377/article/details/111410456