java类的封装关系_java中类之间的关系之封装、继承与多态的几个例子

例子11、编写一个Java应用程序,该程序包括3个类:Monkey类、People类和测试类。要求:

(1)Monkey类中有个public void speak()方法,在speak方法中输出“咿咿呀呀。。。。。。”的信息。

(2)People类是Monkey类的子类,在People类中重写方法speak,在speak方法中输出“小样的,不错嘛,会说话了!”的信息。

(3)在People类中新增方法void think(),在think方法中输出“别说话,认真思考!”的信息。

/**

* Monkey 父类

*/

package cn.yjlblog.www;

public class Monkey

{

public void speak()

{

System.out.println("咿咿呀呀。。。。。。");

}

}

/**

* People 子类

*/

package cn.yjlblog.www;

public class People extends Monkey

{

public void speak()

{

System.out.println("小样的,不错嘛,会说话了!");// TODO Auto-generated method stub

}

void think()

{

System.out.println("别说话,认真思考!");

}

}

/**

* TestClass 测试类

*/

package cn.yjlblog.www;

public class TestClass {

public static void main(String[] args) {

Monkey m = new Monkey();

m.speak();

Monkey p = new People();

p.speak();

//Monkey p1 = new People();//The method think() is undefined for the type Monkey

People p1 = new People();

p1.think();

}

}

例子22、按要求编写一个Java应用程序:

(1)定义一个类(Rectangle),描述一个矩形,包含有长、宽两种属性和计算面积的方法。

(2)定义一个类(Cuboid),继承自矩形类,同时该类描述长方体,具有长、宽、高属性和计算体积的方法。

(3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、宽、高,输出其底面积和体积。

/**

* Rctangle 父类

*/

package cn.yjlblog.www;

public class Rectangle

{

private double length;

private double width;

//生成set 和get 方法

public double getLength() {

return length;

}

public void setLength(double length) {

this.length = length;

}

public double getWidth() {

return width;

}

public void setWidth(double width) {

this.width = width;

}

//构造含有参数的方法

public Rectangle(double length, double width) {

this.length = length;

this.width = width;

}

//求面积

public double Aera()

{

return length * width;

}

}

/**

* Cuboid 子类

*/

package cn.yjlblog.www;

public class Cuboid extends Rectangle

{

private double height;

private double volume;

public double getHeight() {

return height;

}

public void setHeight(double height) {

this.height = height;

}

public double getVolume() {

return volume;

}

public void setVolume(double volume) {

this.volume = volume;

}

public Cuboid(double length, double width, double height) {

super(length, width);

this.height = height;

}

}

/**

* TestClass 测试类

*/

package cn.yjlblog.www;

public class TestClass {

public static void main(String[] args) {

Cuboid rct = new Cuboid(10,20,30);

double v = rct.Aera()*rct.getHeight();

double s = rct.Aera();

System.out.println("The Rctangle's volume is:"+v);

System.out.println("The Rctangle's floor space is:"+s);

}

}

运行结果

The Rctangle's volume is:6000.0

The Rctangle's floor space is:200.0

在这个例子中,我觉的并没有实现题目中的效果...enmmmm,以为题目中(2)中说,要求写出计算体积的方法,但是在Cuboid中不会写......于是把体积 的计算方法写在了测试类中....

例子33、按要求编写一个Java应用程序:

(1)编写一个Shape类,具有属性周长(perimeter)和面积(area);

(2)定义其子类三角形(Triangle)和矩形(Rectangle),分别具有求周长和面积的方法。

(3)定义测试类,在其main方法中创建三角形和矩形类的对象,并赋给Shape类的对象a和b,使用对象a、b来测试其特性。

/**

* Shape 父类

*/

package cn.yjlblog.www;

public class Shape {

private double perimeter;

private double area;

//get set 方法

public double getPerimeter() {

return perimeter;

}

public void setPerimeter(double perimeter) {

this.perimeter = perimeter;

}

public double getArea() {

return area;

}

public void setArea(double area) {

this.area = area;

}

//构造方法

public Shape(double perimeter, double area) {

this.perimeter = perimeter;

this.area = area;

}

}

/**

* Triangle 子类

*/

package cn.yjlblog.www;

public class Triangle extends Shape {

public Triangle(double perimeter, double area) {

super(perimeter, area);

// TODO Auto-generated constructor s

}

private double a1;

private double a2;

private double a3;

//set get 方法

public double getA1() {

return a1;

}

public void setA1(double a1) {

this.a1 = a1;

}

public double getA2() {

return a2;

}

public void setA2(double a2) {

this.a2 = a2;

}

public double getA3() {

return a3;

}

public void setA3(double a3) {

this.a3 = a3;

}

public double perimeter()

{

return a1+a2+a3;

}

public double area()

{

double s1=(a1+a2+a3)/2;

double s2 = s1*(s1-a1)*(s1-a2)*(s1-a3);

double result = Math.sqrt(s2);

return result;

}

}

package cn.yjlblog.www;

/**

* Rectangle 子类

*/

public class Rectangle extends Shape{

public Rectangle(double perimeter, double area) {

super(perimeter, area);

// TODO Auto-generated constructor stub

}

private double b1;

private double b2;

public double getB1() {

return b1;

}

public void setB1(double b1) {

this.b1 = b1;

}

public double getB2() {

return b2;

}

public void setB2(double b2) {

this.b2 = b2;

}

public double perimeter()

{

return (b1+b2)*2;

}

public double area()

{

return b1*b2;

}

}

/**

* TestClass 测试类

*/

package cn.yjlblog.www;

public class TestClass {

public static void main(String[] args) {

Triangle a = new Triangle(0, 0);

a.setA1(3);

a.setA2(4);

a.setA3(5);

System.out.println(a.perimeter());

System.out.println(a.area());

Rectangle b = new Rectangle(0, 0);

b.setB1(3);

b.setB2(4);

System.out.println(b.perimeter());

System.out.println(b.area());

}

}

运行结果

12.0 //三角形周长

6.0 //三角形面积

14.0 //长方形周长

12.0 //长方形面积

这个题目总感觉自己的父类没有用上...enmmm..可能自己的关于java的语法还是.....再想想。

例子44、按要求编写一个Java应用程序:

(1)编写一个矩形类Rect,包含:两个protected属性:矩形的长length和矩形的宽width;

两个构造方法:

一个带有两个参数的构造方法,用于将width和length属性初始化;

一个不带参数的构造方法,用于将width和length属性初始化为0;

两个方法:

求矩形面积的方法area();

求矩形周长的方法perimeter();

(2)通过继承Rect类编写一个具有确定位置的矩形类PlainRect,其确定位置用矩形的左上角坐标来标识,包含:两个属性:矩形左上角坐标startX和startY

两个构造方法:

一个带有四个参数的构造方法,用于对startX、startY、width和length属性初始化;

一个不带参数的构造方法,用于将startX、startY、width和length属性初始化为0;

一个方法:

判断某个点是否在矩形内部的方法isInside(double x,double y)。如在矩形内,返回true,否则返回false。

提示:点在矩形内的判断条件:

x>=startX&&x<=(startX+length)&&y>=startY&&y<=(startY+width)

(3)编写测试类

创建一个左上角坐标为(10,10),长为20,宽为10的矩形对象;计算并打印输出矩形的面积和周长;并判断点(25.5,13)是否在矩形内,并打印输出相关信息。

public class 测试 {

public static void main(String[] args) {

PlainRect p=new PlainRect(10,10,10,20);

p.area();

p.perimeter();

System.out.println("矩形的面积:"+p.area());

System.out.println("矩形的周长:"+p.perimeter());

p.isInside(25.5,13);

}

}

public class Rect {

protected double length;

protected double width;

public Rect(double length,double width) {

//super();

this.length=length;

this.width=width;

}

public Rect() {

//super();

length=0;

width=0;

}

public double area() {

return length*width;

}

public double perimeter() {

return length+width;

}

}

public class PlainRect extends Rect {

protected double startX;

protected double startY;

public PlainRect(double startX,double startY,double width,double length) {

this.startX=startX;

this.startY=startY;

this.width=width;

this.length=length;

}

public PlainRect() {

startX=0;

startY=0;

width=0;

length=0;

}

public boolean isInside(double x,double y) {

if(x>=startX&&x<=(startX+length)&&y>=startY&&y<=(startY+width)){

System.out.println("点在矩形内部");

return true;

}else {

System.out.println("点不在矩形内部");

return false;

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值