classAnimal{voidshout(){System.out.println("动物叫!");}}classDogextendsAnimal{publicvoidshout(){System.out.println("汪汪......!");}publicvoidsleep(){System.out.println("狗狗睡觉......");}}publicclassTest{publicstaticvoidmain(Stringargs[]){Animalanimal=newDog();animal.shout();animal.sleep();Dogdog=animal;dog.sleep();Animalanimal2=newAnimal();dog=(Dog)animal2;dog.shout();}}向上转型对象不能操作子类对象新增方法,应该在父类中添加一个sleep()来实现方法的覆盖;Dogdog=animal;(错误)下转型,需要强制类型转换,子类名称子类对象=(子类)父类实例;Animalanimal2=newAnimal();(错误)父类引用的对象是父类本身,在向下转型时是不安全的,可以改写成父类引用的对象指向子类对象改后代码:
classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){this.name=name;this.age=age;}}publicclassTest{publicstaticvoidmain(Stringargs[]){Personper=newPerson("张三",20);System.out.println(per);System.out.println(per.toString());}}(1)程序的运行结果如下,说明什么问题?Person@166afb3Person@166afb3没有加toString()方法,所以输出调用了object中toString()方法
(1)首先创建一个汽车抽象类,包括编号,名称,租金三个属性(2)创建三个汽车种类,客车、货车和皮卡,他们都继承汽车抽象类(3)设计两个接口,客车继承载客量接口,货车继承载货量接口,皮卡继承载货量接口和载客量接口5.阅读下面程序,分析代码是否能编译通过,如果不能,说明原因,并进行改正。如果能,列出运行结果interfaceAnimal{voidbreathe();voidrun();voideat();}classDogimplementsAnimal{publicvoidbreathe(){System.out.println("I'mbreathing");}voideat(){System.out.println("I'meating");}}publicclassTest{publicstaticvoidmain(String[]args){Dogdog=newDog();dog.breathe();dog.eat();}}不能,类型Dog必须实现继承的抽象方法Animal.run(),且不能减少从父类Animal上继承的方法的可见性
(1)用abstract修饰的类被称为抽象类。抽象类就是没有具体实例对象的类。用抽象类不能创建对象,只能派生子类。(2)抽象方法必须存在于抽象类之中。不能用abstract修饰构造方法、静态方法和私有方法。(3)方法的继承:父类的非私有方法均可以被子类继承。方法的重写:子类重新定义从父类继承来的方法,实现自身的行为,而不是实现由父类定义的行为。
格式如下:
(2)设计球类、圆柱类,圆锥类、矩形类、三角形类、圆类,分别继承平面图形抽象类和立体图形抽象类。(3)设计一个测试类,随机产生球,圆柱、圆锥体、矩形、三角形、圆的尺寸,模拟考试,要求用户回答它们的体积和表面积(或者周长和面积),并判断用户的回答是否正确。
(2)利用抽象类和对象多态重构(1)中的程序,Animal类采用抽象类,合并Feeder类中的方法(3)第二次重构,修改feedAnimals方法,让它接收一个Animal数组
宠物种类有猫、狗,宠物信息包括:编号、种类、品种、单价、数量。要求实现以下功能:(1)展示所有宠物(2)购买宠物(3)展示购买清单:显示购买的宠物品种,数量,价格合计及购买宠物的总价钱
(1)接口Animal:有2个抽象方法cry()和getAnimaName(),要求实现该接口的各种具体动物类给出自己的叫声和种类名称。(2)模拟器类Simulator:有一个playSound(Animalanimal)方法。即参数animal可以调用实现Animal接口类重写的cry()方法播放具体动物的声音、调用重写的getAnimalName()方法显示动物种类的名称。(3)实现Animal接口的Dog类和Cat类(4)测试类:main方法中至少包含如下代码:Simulatorsimulator=newSimulator();simulator.playSound(newDog());simulator.playSound(newCat());
(1)定义一个抽象类交通工具类Transportation,属性:编号,型号,运输负责人。方法:无参构造和含三个参数的构造方法,get和set方法,抽象方法transport()(2)定义一个专用运输车类JDTransportation继承交通工具类,继承父类构造方法,实现transport()方法,输出一个运输信息。(3)定义一个接口GPS实现对货物的定位。接口中有方法showCoordinate()跟踪货物的位置信息。(4)定义一个类Phone实现GPS接口(5)定义一个快递任务类SendTask,具有私有属性:快递单号、货物重量。方法:无参和含参构造方法,get和set方法,sendBefore()方法输出运输前的检查信息和快递单号。send(Transportationt,GPStool)方法输出运货人、车辆编号、型号信息,该方法中调用transport方法输出运输信息,调用showCoordinate()方法输出货物位置坐标。sendAfter(Transportationt)方法输出货物运输完成后的信息。(6)定义一个测试类,创建一个快递任务类对象,一个交通工具类对象,一个GPS工具对象。模拟物流快递过程。输出运输前、运输中和运输后的信息。