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 @宜春

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值