面向对象练习

/*
 * 练习一:
 * 1.建立一个图形接口,声明一个面积函数。圆形和矩形都实现这个接口,并得出两个图形的面积。
 * 注:体现面向对象特征,对数值进行判断。用异常处理。不合法的数值要出现“这个数值是非法的”提示,不再进行运算。
*/
class NoValueException extends RuntimeException{
 NoValueException()
 {
  super();
 }
 NoValueException(String message)
 {
  super(message);
 }
}
interface Areaable{
 double getArea();
}
class Rec implements Areaable{//矩形
 private int length,width;
 public Rec(int length,int width)
 {
  if(length<0 || width<0)
  {
   throw new NoValueException("这个数值是非法的");
  }
  this.length=length;
  this.width=width;
 }
 public double getArea()
 {
  return length*width;
 }
}
class Circle implements Areaable //圆形
{
 private int radius;
 private static final double PI=3.14;
 public Circle(int radius)
 {
  if(radius<=0)
  {
   throw new NoValueException("这个数值是非法的");
  }
  this.radius=radius;
 }
 public double getArea()
 {
  return PI*radius*radius;
 }
}


/*
描述Person
  属性:姓名,年龄
  行为:1.说出姓名和年龄。2.判断是否是同一个人(同姓名,同年龄视为同一人)
  提示:判断姓名相同的方法到API文档String类中查找。
*/
class Person
{
 private String name;
 private int age;
 Person(String name,int age)
 {
  this.name=name;
  this.age=age;
 }
 public void speak()
 {
  System.out.println(this.name+"..."+this.age);
 }
 /**
  既然要判断对象是否相同,直接使用object类中的方法
  但是还是要依据子类的特征来判断,直接覆盖Object中的方法equals。
  */
 public boolean equals(Object obj)//这是Person类中的方法
 {
  if(!(obj instanceof Person))
  {
   throw new ClassCastException("类型错误");
  }
  //判断姓名和年龄是否相同,这些都是Person的属性,所以必须向下转型
  Person p = (Person)obj;
  return this.age==p.age && this.name.equals(p.name);
                           //!!!name是String类型的,而String本身是一个类,name就相当于是String类
                           //的对象。这个equals方法是String类中的方法!
 }
}
//主函数测试一下
//public class Demo2
//{
// public static void main(String[] agrs)
// {
//  Person p1 =new Person("lala",12);
//  Person p2 =new Person("lala",12);
//  boolean x=p1.equals(p2);
//  System.out.println(x);
// }
//}

/*多态练习
*/
class A{
 void fun1()
 {
  System.out.println(fun2());//this.fun2()是默认的,是本类A的
 }                              //继承,多态。本类型引用指向子类型对象
 int fun2()
 {
  return 123;
 }
}
class B extends A{
// void fun1()
// {
//  System.out.println(fun2());//this.fun2()。B类继承了A类。本来代表A类的this指向了子类B,成为了多态。
// }                                            
 int fun2()
 {
  return 456;
 }
}
public class Demo3 {
 public static void main(String[] args) {
  A a;
  B b = new B();
  b.fun1();
//  a=b;
//  a.fun1();
 }
}




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一些 Python 面向对象练习题: 1. 创建一个名为 `Person` 的类,该类具有以下属性: * `name`:字符串,表示人的姓名。 * `age`:整数,表示人的年龄。 * `gender`:字符串,表示人的性别。 该类还应具有一个名为 `speak` 的方法,该方法将打印一个字符串,表示该人正在说话。 2. 创建一个名为 `Rectangle` 的类,该类具有以下属性: * `width`:浮点数,表示矩形的宽度。 * `height`:浮点数,表示矩形的高度。 该类还应具有以下方法: * `area`:返回矩形面积。 * `perimeter`:返回矩形的周长。 3. 创建一个名为 `BankAccount` 的类,该类具有以下属性: * `balance`:浮点数,表示银行账户的余额。 该类还应具有以下方法: * `deposit`:向银行账户存入指定金额。 * `withdraw`:从银行账户取出指定金额。 4. 创建一个名为 `Animal` 的类,该类具有以下属性: * `name`:字符串,表示动物的名称。 * `species`:字符串,表示动物的物种。 该类还应具有一个名为 `make_sound` 的方法,该方法将打印一个字符串,表示该动物正在发出声音。 5. 创建一个名为 `Car` 的类,该类具有以下属性: * `make`:字符串,表示汽车品牌。 * `model`:字符串,表示汽车型号。 * `year`:整数,表示汽车的生产年份。 该类还应具有以下方法: * `get_make`:返回汽车品牌。 * `get_model`:返回汽车型号。 * `get_year`:返回汽车的生产年份。 以上是一些 Python 面向对象练习题,希望能帮助你提高 Python 面向对象编程的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值