2020-09-09(多态+抽象类的练习和总结)


1.定义一个平面图形形状类Shape,在该类中定义一个求面积的方法area()。
  再定义类:圆(Circle),矩形(Rectangle)和三角形(Triangle),从Shape类继承。
  而类正方形(Square)从矩形(Rectangle)继承。在所有子类中定义必要的成员变量和成员方法(包括构造 
  方法和重写的方法)。
  要求:编写一个测试程序,实现构造不同的图形(圆,矩形,三角形,正方形),并能计算各类图形的面积。
2.1)设计一个User类,其中包括用户名、口令等属性以及构造方法(至少重载2个)。获取和设置口令的方法, 
  显示和修改用户名的方法等。编写应用程序测试User类。
 (2)定义一个student类,其中包括用户名、姓名、性别、出生年月等属行以及init()——初始化各属性、 
  display()——显示各属性、modify()——修改姓名等方法。实现并测试这个类。
 (3)从上题的student类中派生出Granduate(研究生)类,添加属性:专业subject、导师adviser。重载相应 
  的成员方法。并测试这个类。
3.编写Java程序,模拟简单的计算器。 
  定义名为Number的类,其中有两个整型数据成员n1和n2,应声明为私有。编写构造方法,赋予n1和n2初始值, 
  再为该类定义加(addition)、减(subtration)、乘(multiplication)、除(division)等公有成员方 
  法,分别对两个成员变量执行加、减、乘、除的运算。 
  在main方法中创建Number类的对象,调用各个方法,并显示计算结果。
4.题目:银行账户程序 本题目要求编写程序模拟银行账户的存取款操作
  步骤1:编写程序Account.java,其中定义银行账户类Account.该类中有账户、姓名、存款余额等数据域;有 
        存款、取款、显示当前余额等方法。
  步骤2:编写程序CreditAccount.java,其中定义信用卡账户类CreditAccount.该类继承自Account类,增加 
        一个透支限额数据域。同时该类账户取款时允许透支,但不能超过透支限额。
  步骤3:编写程序SavingAccount.java,其中定义储蓄账户类SavingAccount.该类继承自Account类,强调该类 
        账户取款时不允许透支
  步骤4:编写测试程序TestAccount.java.测试上述类的定义是否成功。
5.请定义一个交通工具(Vehicle)的类,其中有: 属性:速度(speed),体积(size)等等 
  方法:移动(move()),设置速度(setSpeed(int speed)),加速speedUp(),减速speedDown()等等. 
  最后在测试类Vehicle中的main()中实例化一个交通工具对象,并通过方法给它初始化speed,size的值,并且 
  通过打印出来。另外,调用加速,减速的方法对速度进行改变。 

 第一题: 

 * 定义一个平面图形形状类Shape,在该类中定义一个求面积的方法area()。
 * 再定义类:圆(Circle),矩形(Rectangle)和三角形(Triangle),从Shape类继承。
 * 而类正方形(Square)从矩形(Rectangle)继承。
 * 在所有子类中定义必要的成员变量和成员方法(包括构造方法和重写的方法)。
 * 要求:编写一个测试程序,实现构造不同的图形(圆,矩形,三角形,正方形),并能计算各类图形的面积。

 

主方法:

package com.wdd.week03.day03.test03;

/**
 * 定义一个平面图形形状类Shape,在该类中定义一个求面积的方法area()。
 * 再定义类:圆(Circle),矩形(Rectangle)和三角形(Triangle),从Shape类继承。
 * 而类正方形(Square)从矩形(Rectangle)继承。
 * 在所有子类中定义必要的成员变量和成员方法(包括构造方法和重写的方法)。
 * 要求:编写一个测试程序,实现构造不同的图形(圆,矩形,三角形,正方形),并能计算各类图形的面积。
 * @author WDD
 *
 */

public class Main {
	public static void main(String[] args) {
		Shape c = new Circle(10);
		c.area();
		
		Shape r = new Rectangle(4,5);
		r.area();
		
		Shape t = new Triangle(3, 4, 5);
		t.area();
		
		Shape s = new Square(5);
		s.area();
	}

}

抽象的图形类:

package com.wdd.week03.day03.test03;

//图形类

public abstract class Shape {

	public abstract void area();
	
}

具体的几个子类:

package com.wdd.week03.day03.test03;

//圆类

public class Circle extends Shape{
	double r;//半径

	
	public Circle(double r) {
		super();
		this.r = r;
	}


	public Circle() {
		super();
	}


	@Override
	public void area() {
		// TODO Auto-generated method stub
		System.out.println("三角形的面积为:" + (3.14 * this.r * this.r));
	}
	
}



package com.wdd.week03.day03.test03;

//矩形类

public class Rectangle extends Shape{
	double length;//长
	double width;//宽
	
	public Rectangle() {
		super();
	}
	
	public Rectangle(double length) {
		super();
		this.length = length;
	}

	public Rectangle(double length, double width) {
		super();
		this.length = length;
		this.width = width;
	}
	@Override
	public void area() {
		// TODO Auto-generated method stub
		System.out.println("矩形的面积为:" + (this.length * this.width));
	}
	
}


package com.wdd.week03.day03.test03;

//三角形类

public class Triangle extends Shape{
	double a;
	double b;
	double c;
	public Triangle() {
		super();
	}
	public Triangle(double a, double b, double c) {
		super();
		this.a = a;
		this.b = b;
		this.c = c;
	}
	@Override
	public void area() {
		// TODO Auto-generated method stub
		double l = (a + b + c) / 2;
		double s = Math.sqrt(l * (l - a) * (l - b) * (l - c));
		System.out.println("三角形的面积为:" + s);
	}

}



package com.wdd.week03.day03.test03;

//正方形类

public class Square extends Rectangle{
	
	public Square(double length) {
		super(length);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void area() {
		// TODO Auto-generated method stub
		System.out.println("正方形的面积为:" + (this.length) * this.length);
	}
}

其他题目源码去workspace找,因为练习题简单不上传。

 

总结:

抽象类:比如动物类,形状类,菜类,水果类等
1.能设计成抽象类的类都是用来定义事物本质,其属性和方法都是定义是XXX的条件
  (平时就思考当方法不好具体写实现时,就将该类设计成抽象类)
   格式:public abstract class Animal{}
2.class被abstract所修饰的类叫做抽象类
3.抽象类可以有构造方法,但是没法new,可以被调用(非抽象子类实例化时)
4.抽象类可以有抽象方法,也可以有普通方法,但是普通类不能有抽象方法
5.有抽象方法的类一定是抽象类,抽象类不一定有抽象方法(常考)
6.抽象类关注点在属性

抽象方法:
 当我们平时设计类时,一些方法无法给出具体的实现,就可以使用抽象方法
 普通方法:[权限修饰符] [static] 返回值 方法名(参数列表){方法体}
 抽象方法:[权限修饰符] [static] abstract 返回值 方法名(参数列表);
 格式:public abstract void eat() ;
 所以抽象方法就是用来定义规范的,抽象方法是必须要被非抽象子类重写的,否则毫无意义

static,final,abstract总结:
   http://blog.csdn.net/qq_44543508/article/details/102691425

1.abstract和final能同时修饰一个类吗?
  public abstract final class AA{}
  不能:抽象类设计出来是一定要被继承
	final不能被继承
2.final和static能同时修饰方法吗?
  public static final void aaa(){}
  可以
3.final和abstract可以同时修饰方法吗?
  public abstract final void aaa(){}
  不能:	
4.static和abstract可以同时修饰一个方法吗?
  public static abstract void aaa();
  static 是用类名直接调用
  abstract是没有方法体
  直接调用一个没有方法体的方法,没有任何意思
5,static和final能同时修饰属性吗?
   public static finl int a=1;
   可以,是常量

static,final,abstract 总结链接:http://blog.csdn.net/qq_44543508/article/details/102691425 @宜春

实验一: Java编程基础 (1) 配置环境变量,熟悉编程环境。 (2) 建立一个Java的Application程序,编译、运行以下例题: public class ex01 { public static void main( String arg[ ]) { System.out.println(“hello!”); } } 实验二:流程控制 (1) 编程输出100以内的奇数。 (2) 编程输出乘法表。 (3) 编写程序,定义一个一维数组并赋有初值,同时找出一维数组中的最大值和最小值并输出。 实验三:类和对象 (1) 设计一个User类,其中包括用户名、口令等属性以及构造方法(至少重载2个)、获取和设置口令的方法、显示和修改用户名的方法等。编写应用程序测试User类。 (2) 定义一个Student类,其中包括学号、姓名、性别、出生年月等属性以及init( )——初始化各属性、display( )——显示各属性、modify( )¬——修改姓名等方法。实现并测试这个类。 (3) 从上题的Student类中派生出Graduate(研究生)类,添加属性:专业subject、导师adviser。重载相应的成员方法。并测试这个类。 实验四:类的继承 (1) 定义一个Animal类,其中包括昵称、性别、体重属性,构造函数初始化各属性,显示各属性的成员函数、修改属性的成员函数。实现并测试这个类。 (2) 从上题的类中派生出Dog类,添加年龄属性。重载相应的成员方法,并添加新的方法bark(),输出“wangwangwang”。并测试这个类。 实验五:接口 (1) 定义一个接口Inf,含有常量π和一个实现计算功能的方法calculate( ),再分别定义一个面积类area和一个周长类circumference,各自按计算圆面积和圆周长具体实现接口中的方法,并以半径为5来测试这两个类。 (2) 定义一个接口run(),汽车类和卡车类分别实现这个类,汽车类实现这个接口输出的是“汽车在跑”,卡车类输出的是“卡车在跑”,丰富这两个类,在主程序中测试。 实验六:异常处理 (1) 定义一个类,在main方法的try块中产生并抛出一个异常,在catch块中捕获异常,并输出相应信息,同时加入finally子句,输出信息,证明它的无条件执行。 (2) *定义一个类Caculate实现10以内的整数加减法的计算。自定义一个异常类NumberRangeException,当试图进行超范围运算时,产生相应的信息。编写应用程序进行测试。 实验七:图形界面编程 (1) 在窗体上产生一个单文本框和两个命令按纽:“显示”和“清除”。当用户单击“显示”按纽时,在文本框中显示“Java 程序”字样;单击“清除”按纽时清空文本框。 (2)设计如下界面: 当用户输入了两个操作数并点击运算种类按纽后,在运算结果对应的文本框中显示运算结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值