第一题
写出下列程序的运行结果:
package com.cxl.ch5.demo5;
public class Base {
int m=0;
public int getM(){
return m;
}
}
package com.cxl.ch5.demo5;
public class Sub extends Base{
int m=1;
public int getM(){
return m;
}
}
package com.cxl.ch5.demo5;
public class MyTest {
public static void main(String[] args) {
Sub sub=new Sub();
System.out.println(sub.m);
System.out.println(sub.getM());
}
}
运行结果:
1
1
第二题
仔细阅读下列程序,写出程序的运行结果。
public class Man {
void drink(){
System.out.println("drink water");
}
}
class OldMan extends Man{
void drink(){
System.out.println("drink tea");
}
}
class YoungMan extends Man{
void drink(){
System.out.println("drink beer");
}
void dance(){
System.out.println("can dance");
}
}
public class ManTest {
public static void main(String[] args) {
Man tom=new Man();
Man jack=new YoungMan();
Man mary=new OldMan();
tom.drink();
jack.drink();
mary.drink();
if(jack instanceof YoungMan){
((YoungMan)jack).dance();
}
}
}
运行结果:
drink water
drink beer
drink tea
can dance
第三题
写出下列程序的输出结果。
package com.cxl.ch5.demo3;
public abstract class LivingThings {
public abstract String feature();
}
package com.cxl.ch5.demo3;
public class Animal extends LivingThings {
String mouth;
public Animal() {
}
public Animal(String mouth) {
this.mouth = mouth;
}
@Override
public String feature() {
return mouth;
}
}
package com.cxl.ch5.demo3;
public class Plant extends LivingThings {
String leaf;
public Plant() {
}
public Plant(String leaf) {
this.leaf = leaf;
}
@Override
public String feature() {
return leaf;
}
}
package com.cxl.ch5.demo3;
public class Example {
public static void main(String[] args) {
Animal animal=new Animal("嘴巴");
System.out.println(animal.feature());
Plant plant=new Plant("叶子");
System.out.println(plant.feature());
}
}
运行结果:
嘴巴
竹子
第四题
编程体,设计一个动物声音“模拟器”,希望模拟器可以模拟许多动物的叫声,要求如下。
1)编写抽象类Animal
Animal抽象类有2个抽象方法cry()和getAnimalName(),即要求各种具体的动物给出自己的叫声和种类名称。
2)编写模拟器类Simulator
该类有一个playSound(Animal animal)方法,该方法的参数是Animal类型。即参数animal可以调用Animal的子类重写的cry方法播放具体动物的声音,调用子类重写的getAnimalName()方法显示动物种类的名称。
3)编写Animal类的子类:Dog和cat类
4)编写主类Application,
在主类Application的main方法中至少包含如下代码。
Simulator simulator=new Simulator();
Simulator.playSound(new Dog());
Simulator.playSound(new Cat());
Animal.java 文件
package cn.fjsay.java.demo4;
public abstract class Animal {
public abstract void cry();
public abstract String getAnimalName();
}
Cat.java 文件
package cn.fjsay.java.demo4;
class Cat extends Animal {
@Override
public void cry() {
System.out.println("Cat meows");
}
@Override
public String getAnimalName() {
return "Cat";
}
}
Dog.java文件
package cn.fjsay.java.demo4;
class Dog extends Animal {
@Override
public void cry() {
System.out.println("Dog barks");
}
@Override
public String getAnimalName() {
return "Dog";
}
}
Simulator.java 文件
package cn.fjsay.java.demo4;
class Simulator {
public void playSound(Animal animal) {
animal.cry();
System.out.println("Animal type: " + animal.getAnimalName());
}
}
Test.java 文件
package cn.fjsay.java.demo4;
public class Test {
public static void main(String[] args) {
Simulator simulator = new Simulator();
simulator.playSound(new Dog());
simulator.playSound(new Cat());
}
}
运行结果:
Dog barks
Animal type: Dog
Cat meows
Animal type: Cat
第五题
面向抽象的编程,实现面向对象的设计原则“开闭原则”。
1定义手机类,包含有手机卡。手机与卡是关联关系,手机关联一个抽象的卡类,使得手机可以换卡,
2定义抽象的卡类SIM,该抽象类有3个抽象方法,即 getNumber(),setNumber()和getCorpName()。
3定义移动卡是抽象卡的子类,在子类中重写父类的所有抽象方法。
4定义联通卡是抽象类的子类,在子类中重写父类的所有抽象方法。
5定义一个主类,在主类的主方法中实例化一个手机,手机使用的是移动卡,电话号码是1825678956。
由于资费高,后此手机又换了联通卡,电话号码是13256891478。
CmSimCard.java文件
package cn.fjsay.java.demo5;
public class CmSimCard extends SimCard {
private String number;
@Override
public String getNumber() {
return number;
}
@Override
public void setNumber(String number) {
this.number = number;
}
@Override
public String getCorpName() {
return "移动卡";
}
}
CuSimCard.java文件
package cn.fjsay.java.demo5;
public class CuSimCard extends SimCard{
private String number;
@Override
public String getNumber() {
return number;
}
@Override
public void setNumber(String number) {
this.number = number;
}
@Override
public String getCorpName() {
return "联通卡";
}
}
Phone.java文件
package cn.fjsay.java.demo5;
public class Phone {
private SimCard simCard;
public void changeSimCard(SimCard newSimCard) {
simCard = newSimCard;
}
public void makeCall() {
String number = simCard.getNumber();
System.out.println("手机使用的是移动卡" + simCard.getCorpName() + "电话号码是" + number);
}
}
SimCard.java文件
package cn.fjsay.java.demo5;
public abstract class SimCard {
public abstract String getNumber();
public abstract void setNumber(String number);
public abstract String getCorpName();
}
Test.java 文件
package cn.fjsay.java.demo5;
public class Test {
public static void main(String[] args) {
Phone p = new Phone();
SimCard m = new CuSimCard();
m.setNumber("1825678956");
p.changeSimCard(m);
p.makeCall();
SimCard cu = new CuSimCard();
cu.setNumber("13256891478");
p.changeSimCard(cu);
p.makeCall();
}
}
运行结果:
手机使用的是移动卡联通卡电话号码是1825678956
手机使用的是移动卡联通卡电话号码是13256891478
第六题
编程题,创建一个含有指向某对象的空白final引用的类,在所有构造方法内部都执行空白final的初始化动作,说明Java确保final在使用前必须被初始化,且一旦被初始化即无法改变。下列程序给出了部分代码。请补充完成。
class Poppet{
int i;
Poppet(){
}
Poppet(int i){
this.i=i;
}
}
public class BlankFinal {
final Poppet poppet;
}
BlankFinal.java
package cn.fjsay.java.demo6;
public class BlankFinal {
final Poppet poppet;
public BlankFinal() {
poppet = new Poppet(); // 在构造方法中初始化空白final引用
}
public BlankFinal(int i) {
poppet = new Poppet(i); // 在构造方法中初始化空白final引用
}
}
Poppet.java文件
package cn.fjsay.java.demo6;
public class Poppet {
int i;
Poppet() {
}
Poppet(int i) {
this.i = i;
}
}
Test.java 文件
package cn.fjsay.java.demo6;
public class Test {
public static void main(String[] args) {
BlankFinal blankFinal1 = new BlankFinal();
BlankFinal blankFinal2 = new BlankFinal(10);
System.out.println(blankFinal1.poppet.i);
System.out.println(blankFinal2.poppet.i);
}
}
运行结果:
0
10
第七题
多态性编程题。1动物Animal可以发出叫声,void cry(){}
2子类猫Cat重写父类的cry方法,发出喵喵的叫声。
3子类Dog重写父类的cry方法,发出汪汪的叫声。
4在测试类的主方法中,编写多态的代码,父类的对象指向不同的子类实体。上转型对象调用子类重写的方法。运行期后期动态绑定方法。
Animal.java 文件
package cn.fjsay.java.demo7;
public class Animal {
public void cry() {
System.out.println("Animal is crying");
}
}
Cat.java 文件
package cn.fjsay.java.demo7;
public class Cat extends Animal {
@Override
public void cry() {
System.out.println("The cat is meowing");
}
}
Dog.java文件
package cn.fjsay.java.demo7;
public class Dog extends Animal {
@Override
public void cry() {
System.out.println("The dog is barking");
}
}
Test.java 文件
package cn.fjsay.java.demo7;
public class Test {
public static void main(String[] args) {
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.cry();
a2.cry();
}
}
运行结果“
The cat is meowing
The dog is barking
第八题
多态性编程题。
1定义一个抽象的AbstractShap类,类体中定义了抽象的方法double area();void draw();
2编写AbstractShape的子类长方形类,在长方形类中重写父类的所有抽象方法。
3编写AbstractShape的子类圆形类,在圆形类中重写父类的所有抽象方法。
4编写测试类,在主类的主方法中,通过上转型对象调用方法,分别调用子类重写的方法。
AbstractShape.java文件
package cn.fjsay.java.demo8;
public abstract class AbstractShape {
public abstract double area();
public abstract void draw();
}
Circle.java 文件
package cn.fjsay.java.demo8;
class Circle extends AbstractShape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public void draw() {
System.out.println("圆形");
}
}
Rectangle.java 文件
package cn.fjsay.java.demo8;
class Rectangle extends AbstractShape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
@Override
public double area() {
return length * width;
}
@Override
public void draw() {
System.out.println("长方形");
}
}
Test.java文件
package cn.fjsay.java.demo8;
public class Test {
public static void main(String[] args) {
AbstractShape shape1 = new Rectangle(5, 3);
AbstractShape shape2 = new Circle(2.5);
shape1.draw();
System.out.println("面积: " + shape1.area());
shape2.draw();
System.out.println("面积: " + shape2.area());
}
}
运行结果:
长方形
面积: 15.0
圆形
面积: 19.634954084936208
免责声明
本文章所有的图片以及代码等仅作为学习使用,不作为商业目的,如有侵权请联系我删除!
所提供的代码仅供参考,有很多不足请自行补充!