首页 > 代码库 > JAVA-day04-继承、多态
JAVA-day04-继承、多态
<pre name="code" class="java">class Factory { static Factory factory = new Factory(); private Factory(){} int num =0; public static Factory getInstance() { return factory; } public void jiaGong() { System.out.println("加工的是第"+(++num)+"个零件儿"); } } class Demo2 { public static void main(String[] args) { Factory f1 = Factory.getInstance(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); Factory f2 = Factory.getInstance(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); } }
/*设计模式:解决某一类问题最有效的方式单例设计模式:解决的问题是,一个类在内存中只有一个实例1:构造方法不能被外界使用2:只能是该类提供自身类型的对象3:能让外界获取到这个对象*///饿汉式class Single{static Single single = new Single();private Single(){}public static Single getInstance(){return single;}}//懒汉式class Single2{static Single2 single = null;private Single2(){}public static Single2 getInstance(){if(single==null)single = new Single2();return single;}}class Demo1{public static void main(String[] args) {Single s = Single.getInstance();Single s2 = Single.getInstance();System.out.println(s==s2);}}
class Factory { static Factory factory = new Factory(); private Factory(){} int num =0; public static Factory getInstance() { return factory; } public void jiaGong() { System.out.println("加工的是第"+(++num)+"个零件儿"); } } class Demo2 { public static void main(String[] args) { Factory f1 = Factory.getInstance(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); Factory f2 = Factory.getInstance(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); } }
class SuperMan { private String name; static SuperMan superMan = new SuperMan("克拉克"); private SuperMan(){} private SuperMan(String name) { this.name = name; } public static SuperMan getInstance() { return superMan; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } } class Demo3 { public static void main(String[] args) { SuperMan superMan = SuperMan.getInstance(); System.out.println(superMan.getName()); } }
/*继承:1:提高了代码的重复利用,2:使类和类之间产生了关系 被继承的类是父类,继承的类称为子类 java中是单继承的: ·1:单继承:一个类只能有一个父类 2:多继承:一个类可以有多个父类 ---单继承 class Fu { } class Zi extends Fu { } ---多继承:会出现调用的不确定 class Fu1 { public void show() { } } class Fu2 { public void show() { } } class Zi extends Fu1,Fu2 { } Zi z = new Zi(); z.show(); 支持多层继承: class A { } class B extends A { } class C extends B { } 什么时候用继承? 不要为了重复利用代码而继承 事物之间存在所属关系时使用继承 比如:学生属于人的一种 猫属于动物的一种 */ class Demo4 { public static void main(String[] args) { } } class Animal { String name; int age; public void eat() { } } class Student extends Animal { public void study() { } } class Worker extends Person { public void work() { } }
/* 继承中成员的特点: 成员变量: 成员函数 构造函数 this是一个引用 super用于在子类中访问父类中的成员 父类中私有的成员,子类也会继承过来,只是无权访问,通过父类提供的; */ class Fu { private int num = 5; public int getNum() { return num; } } class Zi extends Fu { int num = 6; public void show() { //System.out.println(this.num); //System.out.println(super.num); System.out.println(getNum()); } } class Demo6 { public static void main(String[] args) { Zi z = new Zi(); //System.out.println(z.num); //System.out.println(z.num2); z.show(); } }
//成员函数 //子父类中出现了一模一样的方法(包括返回值类型),这种现象叫重写,覆盖 //子类一旦重写了父类中的方法,使用子类对象调用重写的方法执行的是子类中的 class Fu { public void show() { System.out.println("fu"); } } class Zi extends Fu { public void show() { System.out.println("zi"); } } class Demo7 { public static void main(String[] args) { Zi z= new Zi(); z.show(); } } /* class Phone { public void call() {} public void tel() { System.out.println("显示号码"); } } class NewPhone extends Phone { //沿袭了父类功能,实现不同了 public void tel() { super.tel(); System.out.println("显示名字"); } } */ /* class ZhangSan { public void eat() { System.out.println("细嚼慢咽"); } } class ZhangXiaoSan extends ZhangSan { public void eat() { System.out.println("狼吞虎咽"); } } */
/* 子父类中构造函数的特点: 在创建子类对象时,总是先调用父类的构造方法,再调用子类的构造方法,原因是系统默认在子类的构造方法的第一行加入了一条语句 super(),这条语句默认是调用父类中无参的构造方法 为什么先去调用的父类的构造方法:先去执行父类的构造方法,可以使用父类构造方法中的初始化功能 如果父类中没有无参的构造方法,那么子类必须在构造方法的第一行手动加上super调用父类中的某一个构造方法 */ class Fu { String name; int age; //Fu(){} Fu(String name,int age) { this.name = name; this.age = age; } } class Zi extends Fu { Zi() { super("lisi",5); System.out.println("zi"); } Zi(String name,int age) { super(name,age); //this.name = name; //this.age = age; } } class Demo8 { public static void main(String[] args) { Zi z = new Zi(); } }
class Fu { int age; Fu(){} Fu(int age) { this.age = age; } } class Zi { Zi() { //super(); System.out.println("Hello World!"); } Zi(int age) { this(); //this和super()都必须写在第一行,所以用了this就不能使用super()了 //super(age); } } class Demo9 { public static void main(String[] args) { Zi z = new Zi(67); } }
/* final:修饰符,可以修饰 类,变量,方法 一个类被修饰为final的,那么这个类不能被继承了 */ class Test { public static final double PI = 3.1415;//符号常量了 double radius =12.3; public void show()//这个方法不能被重写 { } public double area() { return PI* radius*radius; } } class Demo10 { public static void main(String[] args) { final int a=889; // a = 56; Test t = new Test(); t.show(); show(1,2); } public static int show(final int a,final int b) { a = 34; b = 67; return a+b; } } class Single { static final Single single = new Single();//引用single不能再指向其他的对象了 private Single(){} public static Single getInstance() { return single; } }
/* abstract:抽象的 */ class Demo11 { public static void main(String[] args) { System.out.println("Hello World!"); } } //如果一个类中含有抽象方法,那么这个类必须是抽象的 //抽象类:同样是类,同样是在描述事物,只不过出现了没有足够的信息描述事物方法 abstract class 犬科 { public abstract void 吼叫();//没有足够的信息描述事物的行为 } class 狗 { public void 吼叫() { System.out.println("汪汪"); } } class 狼 { public void 吼叫() { System.out.println("嗷嗷"); } }
//抽象类的特点: //1:抽象类不能创建对象 //2:抽象类的子类没有重写抽象类中的抽象方法,那么这个子类也是抽象类 /* 1:抽象类一定是父类吗? 一定是父类 2:抽象类有构造方法吗? 有构造方法,用来给子类进行初始化 抽象类和普通类有什么区别? 抽象类也是类,和普通类的相同点:都是类,都是用来描述事物的 不同点:1:抽象类不能创建对象,普通类可以创建对象 2:抽象类可以含有抽象方法,普通类不可以 3:抽象类和哪些修饰符不能同时使用? 1:final:抽象类需要被继承,被final修饰的类不能被继承 2:static:抽象方法不能通过类名调用,静态方法可以通过类名调用 3:private:抽象方法必须被子类可以覆盖,私有的方法不能被子类覆盖 4:抽象类一定含有抽象方法吗? 不一定,当不希望一个类被创建对象时,可以把这个类修饰为abstract */ //计算圆形和矩形的面积 abstract class Shape { public abstract double getArea(); } abstract class Circle extends Shape { public static final double PI = 3.1415; private double radius; public Circle(double radius) { this.radius = radius; } //没有覆盖父类中的抽象方法,那么该子类中也含有抽象方法,那么这个子类也是抽象类 //public abstract double getArea(); } class Rectangle extends Shape { private double length; private double width; public Rectangle(double length,double width) { this.length = length; this.width = width; } public double getArea() { return this.length*this.width; } } class Demo12 { public static void main(String[] args) { //Rectangle r = new Rectangle(10,10); //System.out.println(r.getArea()); Circle c = new Circle(); //Shape s = new Shape(); //s.getArea(); } }
/* 需求:公司中程序员有姓名,工号,薪水,工作内容。 项目经理除了有姓名,工号,薪水,还有奖金,工作内容。 对给出需求进行数据建模。 */ abstract class Employee { private String name; private String id; private double money; Employee(){} Employee(String name,String id,double money) { this.name = name; this.id = id; this.money = money; } public abstract void work(); } class Programmer extends Employee { Programmer(){} Programmer(String name,String id,double money){ super(name,id,money); } public void work() { System.out.println("敲代码"); } } class Manager extends Employee { private double bonus; Manager(){} Manager(String name,String id,double money,double bonus) { super(name,id,money); this.bonus = bonus; } public void work() { System.out.println("管理程序员"); } } class Demo13 { public static void main(String[] args) { Programmer pro = new Programmer("小黑","110",10000); pro.work(); Manager manager = new Manager("小白","119",15000,5000); manager.work(); } }
/* 接口:定义形式 interface { 全局常量(public static final) 抽象方法(public abstract) } 接口可以解决Java中单继承的问题 接口可以多实现,实现多个接口不会出现调用的不确定,因为接口中的方法都是抽象的,都没有实现 在创建子类对象调用接口中的方法时,很明确是在调用子类中覆盖的方法 */ // 把接口看成特殊的类 interface inter { public static final int NUM = 110; public abstract void show(); } interface inter2 { public abstract void show(); } class Test implements inter,inter2 { public void show() { System.out.println("show"); } } class Demo14 { public static void main(String[] args) { Test t = new Test(); //t.show(); System.out.println(Test.NUM); System.out.println(t.NUM); System.out.println(inter.NUM); } }
/* 一个类在继承的同时还可以去实现接口 类和类之间是继承 类和接口之间是实现 父类提供该继承体系的最基本的功能 实现可以得到继承以外的额外功能 */ class Person { } interface inter { public static final int NUM = 110; public abstract void show(); } class Student extends Person implements inter { } /* 接口和接口之间可以多继承 interface a {} interface b extends a {} interface c extends a,b {} */
import java.util.*; /* 接口的好处: 1:接口可以提高程序的扩展性 2:接口是对外暴露的一些规则 3:接口具备强制性,降低了类之间的耦合性 */ interface USB { } /* 抽象类和接口的区别: 犬科动物:警犬,导盲犬,搜爆犬 abstract class 犬科 { public abstract void 训练(); } class 警犬 extends 犬科 { public abstract void 训练(){ } public void 破案 () {} } class 导盲犬 extends 犬科 { public abstract void 训练(){ } public void 导盲 () {} } interface soubao { } class 搜爆犬 extends 犬科 implements soubao { public abstract void 训练(){ } public void 搜爆 () {} } class 搜爆猫 implements soubao { public void 搜爆 () {} } class 搜爆猪 implements soubao { public void 搜爆 () {} } */ class Demo16 { public static void main(String[] args) { Properties pro = System.getProperties(); System.out.println(pro); } }
/* 多态:多种形态 class Animal { } class 猫 extends Animal { } 猫:可以看成猫 猫 mao = new 猫();//常态 可以看成动物 Animal mao = new 猫();//多态 多态:父类类型的引用指向了子类类型的对象 多态的前提:存在继承或实现 多态的弊端:只能使用父类中定义的功能,子类特有的功能不能调用了 */ abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Demo17 { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); cat.catchMouse(); Animal mao = new Cat(); mao.eat(); //mao.catchMouse();//把子类类型的对象看成父类类型,就只能使用父类中定义的功能了 } }
abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨头"); } public void kanJia() { System.out.println("狗看家"); } } class Demo18 { public static void main(String[] args) { Cat cat = new Cat(); //cat.eat(); chi(cat); Dog dog1 = new Dog(); //dog1.eat(); chi(dog1); } public static void chi(Animal animal) //Animal animal = new Cat(); Animal animal = new Dog(); { animal.eat(); animal.kanJia(); } /* public static void chi(Cat cat) { cat.eat(); } public static void chi(Dog dog) { dog.eat(); } public static void chi(Pig pig) { pig.eat(); } */ }
//在多态中使用子类特有的功能 abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨头"); } public void kanJia() { System.out.println("狗看家"); } } class Demo19 { public static void main(String[] args) { Animal animal = new Cat();// 向上转型--自动转换 //animal.eat(); //使用子类特有的功能 Cat cat = (Cat)animal;//向下转型--强制转 //cat.catchMouse(); chi(cat); } public static void chi(Animal animal)//Animal animal = new Cat(); Animal animal = new Dog(); { animal.eat(); if(animal instanceof Cat) { Cat cat = (Cat)animal; cat.catchMouse(); } if(animal instanceof Dog) { Dog dog = (Dog)animal; dog.kanJia(); } } }
/* 多态中成员的特点: 成员变量:在多态中编译时期能够使用哪些变量看父类,执行结果也看父类 成员函数:编译时期能够使用哪些方法看父类,执行结果看子类,如果子类重写了父类中的方法,看子类,否则看父类 静态成员函数:编译执行都看父类 */ class Fu { int num1 = 5; public void show() { System.out.println("fu"); } public static void ff() { System.out.println("fu static "); } } class Zi extends Fu { int num1 = 6; public void show() { System.out.println("zi"); } public void fun() { System.out.println("fun"); } public static void ff()//静态只能覆盖静态 { System.out.println("zi static "); } } class Demo20 { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num1); //System.out.println(f.num2); f.show(); f.ff(); //f.fun(); } }
/* 接口和多态 */ interface inter { public void show(); } class Test1 implements inter { public void show() { System.out.println("test1"); } } class Test2 implements inter { public void show() { System.out.println("test2"); } } class Demo21 { public static void main(String[] args) { Test1 t = new Test1(); //t.show(); fun(t); Test2 t2 = new Test2(); //t2.show(); fun(t2); } public static void fun(inter in)//inter in = new Test1(); inter in = new Test2(); { //return in; in.show(); } /* public static void fun(Test1 t) { t.show(); } public static void fun(Test2 t) { t.show(); } */ }
/* 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。 狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候, 会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声; 猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。 猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时, 会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声; 青蛙是一种两栖动物(既是水生动物也是陆生动物), 既不是哺乳类的也不是肉食性的,属于卵生。当青蛙情绪好的时候, 会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”; */ abstract class Animal { public static final int HAPPY = 1; public static final int UNHAPPY = 2; protected boolean mammal; protected boolean carnivorous; private int mood; public void setMood(int mood) { this.mood = mood; } public int getMood() { return this.mood; } public boolean isMammal() { return this.mammal; } public boolean isCarnivorous() { return this.carnivorous; } public abstract String sayHello(); public abstract String sayHello(int mood); } interface Land { public abstract int getNumberOfLegs(); } interface Water { public abstract boolean getGillFlags(); public abstract boolean getLayEggsFlags(); } class Frog extends Animal implements Land,Water { private int numberOfLegs = 4; private boolean gillFlag = false; private boolean layEggsFlag = true; public Frog() { this.mammal = false; this.carnivorous = false; } public String sayHello() { return "呱呱"; } public String sayHello(int mood) { this.setMood(mood); int m = this.getMood(); switch(m) { case HAPPY: return "呱呱呱";//break; case UNHAPPY: return "扑通一声跳入水中"; default: return "呱呱"; } } public boolean getGillFlags() { return this.gillFlag; } public boolean getLayEggsFlags() { return this.layEggsFlag; } public int getNumberOfLegs() { return this.numberOfLegs; } } class Cat extends Animal implements Land { private int numberOfLegs = 4; public Cat() { this.mammal = true; this.carnivorous = true; } public String sayHello() { return "喵~"; } public String sayHello(int mood) { this.setMood(mood); int m = this.getMood(); switch(m) { case HAPPY: return "咕噜咕噜";//break; case UNHAPPY: return "嘶嘶"; default: return "喵~"; } } public int getNumberOfLegs() { return this.numberOfLegs; } } class Demo22 { public static void main(String[] args) { Cat cat = new Cat(); if(cat.isMammal()) System.out.println("猫是哺乳动物"); else System.out.println("猫不是哺乳动物"); if(cat.isCarnivorous()) System.out.println("猫是肉食动物"); else System.out.println("猫不是肉食动物"); System.out.println("猫通常情况下和人打招呼的方式是:"+cat.sayHello()); System.out.println("猫情绪好时和人打招呼的方式是:"+cat.sayHello(Animal.HAPPY)); System.out.println("猫情绪不好时和人打招呼的方式是:"+cat.sayHello(Animal.UNHAPPY)); System.out.println("猫是陆生动物,猫有"+cat.getNumberOfLegs()+"条腿儿"); } }
注:按Java规范书写程序代码,如果你认为程序有错误,请指出,并说明程序错误原因。
1.
写出程序结果
class Demo
{
public static void func()throws Exception
{
try
{
throw new Exception();
}
finally
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
}
如果func放上声明了该异常。结果是?B C D
====================================================================
2.
写出程序结果
class Test
{
Test()
{ //super();
System.out.println("Test");
}
}
class Demo extends Test
{
Demo()
{
//super();
System.out.println("Demo");
}
public static void main(String[] args)
{
new Demo();//Test Demo
new Test();//Test
}
}
====================================================================
3.
写出程序结果
interface A{}
class B implements A
{
public String func()
{
return "func";
}
}
class Demo
{
public static void main(String[] args)
{
A a=new B();
System.out.println(a.func());
}
}
//编译出错
====================================================================
4.
写出程序结果
class Fu
{
boolean show(char a)
{
System.out.println(a);
return true;
}
}
class Demo extends Fu
{
public static void main(String[] args)
{
int i=0;
Fu f=new Demo();
Demo d=new Demo();
for(f.show(‘A‘); f.show(‘B‘)&&(i<2);f.show(‘C‘))
{
i++;
d.show(‘D‘);
}
}
boolean show(char a)
{
System.out.println(a);
return false;
}
}
A B
====================================================================
5.
写出程序结果
interface A{}
class B implements A
{
public String test()
{
return "yes";
}
}
class Demo
{
static A get()
{
return new B();
}
public static void main(String[] args)
{
A a=get();//A a = new B();
System.out.println(a.test());
}
}
//编译出错
====================================================================
6.
写出程序结果:
class Super
{
int i=0;
public Super(String a)
{
System.out.println("A");
i=1;
}
public Super()
{
System.out.println("B");
i+=2;
}
}
class Demo extends Super
{
public Demo(String a)
{
//super();
System.out.println("C");
i=5;
}
public static void main(String[] args)
{
int i=4;
Super d=new Demo("A");//B C
System.out.println(d.i);//5
}
}
====================================================================
7.
interface Inter
{
void show(int a,int b);
void func();
}
class Demo
{
public static void main(String[] args)
{
//补足代码;调用两个函数,要求用匿名内部类
Inter inter = new Inter(){
public void show(int a,int b)
{
}
public void func()
{}
};
inter.show(2,3);
inter.func();
}
}
====================================================================
8.
写出程序结果
class TD
{
int y=6;
class Inner
{
static int y=3;
void show()
{
System.out.println(y);
}
}
}
class TC
{
public static void main(String[] args)
{
TD.Inner ti=new TD().new Inner();
ti.show();
}
}
//编译出错,内部类含有静态成员,内部类必须是静态的
====================================================================
9.
选择题,写出错误答案错误的原因,用单行注释的方式。
class Demo
{
int show(int a,int b){return 0;}
}
下面那些函数可以存在于Demo的子类中。
A.public int show(int a,int b){return 0;}//可以,这是重写
B.private int show(int a,int b){return 0;}//不可以,子类在重写父类中的方法时,方法的权限不能小于父类的,只能大 于或等于
C.private int show(int a,long b){return 0;}//可以,重载
D.public short show(int a,int b){return 0;}//不可以,既不是重写,也不是重载
E.static int show(int a,int b){return 0;}//不可以,静态只能覆盖静态
====================================================================
10.
写出this关键字的含义,final有哪些特点?
this:代表本类对象,哪个对象调用this所在函数,this就代表哪个对象。
final:
1,修饰类,变量(成员变量,静态变量,局部变量),函数。
2,修饰的类不可以被继承。
3,修饰的函数不可以被覆盖。
4,修饰的变量是一个常量,只能赋值一次。
====================================================================
11.
写出程序结果:
class Fu
{
int num=4;
void show()
{
System.out.println("showFu");
}
}
class Zi extends Fu
{
int num=5;
void show()
{
System.out.println("showZi");
}
}
class T
{
public static void main(String[] args)
{
Fu f=new Zi();
Zi z=new Zi();
System.out.println(f.num); //4
System.out.println(z.num); //5
f.show(); //showZi
z.show(); //showZi
}
}
====================================================================
12.
interface A
{
void show();
}
interface B
{
void add(int a,int b);
}
class C implements A,B
{
//程序代码
private int a,b;
private int sum;
public void add(int a,int b)
{
this.a =a;
this.b = b;
this.sum = a+b;
}
public void show()
{
System.out.println(sum);
}
}
class D
{
public static void main(String[] args)
{
C c=new C();
c.add(4,2);
c.show();//通过该函数打印以上两个数的和。
}
}
====================================================================
13.
写出程序结果
class Demo
{
public static void main(String[] args)
{
try
{
showExce();
System.out.println("A");
}
catch(Exception e)
{
System.out.println("B");
}
finally
{
System.out.println("C");
}
System.out.println("D");
}
public static void showExce()throws Exception//声明该方法可能发生异常
{
throw new Exception();
}
}
B C D
====================================================================
14.
写出程序结果
class Super
{
int i=0;
public Super(String s)
{
i=1;
}
}
class Demo extends Super
{
public Demo(String s)
{
//super();
i=2;
}
public static void main(String[] args)
{
Demo d=new Demo("yes");
System.out.println(d.i);
}
}
//编译出错,父类中没有空参的构造方法
====================================================================
15.
写出程序结果
class Super
{
public int get(){return 4;}
}
class Demo15 extends Super
{
public long get(){return 5;}
public static void main(String[] args)
{
Super s=new Demo15();
System.out.println(s.get());
}
}
编译出错,因为 public long get(){return 5;}不是重写也不是重载
====================================================================
16.
写出程序结果:
class Demo
{
public static void func()
{
try
{
throw new Exception();
System.out.println("A");//这句话永远执行不到
}
catch(Exception e)
{
System.out.println("B");
}
}
public static void main(String[] args)
{
try
{
func();
}
catch(Exception e)
{
System.out.println("C");
}
System.out.println("D");
}
}
编译出错
====================================================================
17.
class Demo
{
public void func()
{
//位置1;
new Inner();
}
class Inner{}
public static void main(String[] args)
{
Demo d=new Demo();
// 位置2
new Inner();
}
}
A.在位置1写 new Inner(),可不可以?不可以写出原因;//可以
B.在位置2写 new Inner(),可不可以?不可以写出原因;//不可以,因为main是静态的,只能使用静态的
C.在位置2写 new d.Inner(),可不可以?不可以写出原因;// 不可以,new new Demo()
D.在位置2写 new Demo.Inner(),可不可以?不可以写出原因;//不可以,因为内部类不是静态的
====================================================================
18.
写出程序结果
class Exc0 extends Exception{}
class Exc1 extends Exc0{}
class Demo
{
public static void main(String[] args)
{
try
{
throw new Exc1();
}
catch(Exception e)
{
System.out.println("Exception");
}
catch(Exc0 e)
{
System.out.println("Exc0");
}
}
}
编译出错,父类异常写在了子类异常的上边
====================================================================
19.
interface Test
{
void func();
}
class Demo
{
public static void main(String[] args)
{
//补足代码;(匿名内部类)
new Demo().show(new Test(){
public void func()
{ }
});
}
void show(Test t)
{
t.func();
}
}
====================================================================
20.
写出程序结果
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
throw new Exception();
output+="1";
}
catch(Exception e)
{
output+="2"; //1342
return;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String args[])
{
foo(0);
System.out.println(output); //134
foo(1);
System.out.println(output); //13423
}
}
====================================================================
21.
建立一个图形接口,声明一个面积函数。圆形和矩形都实现这个接口,并得出两个图形的面积。
注:体现面向对象的特征,对数值进行判断。用异常处理。不合法的数值要出现“这个数值是非法的”提示,不再进行运算。
====================================================================
22.
补足compare函数内的代码,不许添加其他函数。
class Circle
{
private static double pi=3.14;
private double radius;
public Circle(double r)
{
radius=r;
}
public static double compare(Circle[] cir)
{
//程序代码//其实就是在求数组中的最大值。
int max =0;
for(int i=1;i<cir.length;i++)
{
if(cir[i].radius>cir[max].radius)
max = i;
}
return cir[max].radius;
}
}
class TC
{
public static void main(String[] args)
{
Circle cir[]=new Circle[3];//创建了一个类类型数组。
cir[0]=new Circle(1.0);
cir[1]=new Circle(2.0);
cir[2]=new Circle(4.0);
System.out.println("最大的半径值是:"+Circle.compare(cir));
}
}
====================================================================
23.
写出程序结果
public class Demo
{
private static int j = 0;
private static boolean methodB(int k)
{
j += k;
return true;
}
public static void methodA(int i)
{
boolean b;
b = i < 10 | methodB (4);
b = i < 10 || methodB (8); //methodB (8)没执行
}
public static void main (String args[] )
{
methodA (0);
System.out.println(j);//4
}
}
====================================================================
24.
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
法进行属性访问。
====================================================================
25.
在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,
如果传入的数组为null,应抛出IllegalArgumentException异常。
在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,
例如,字符不存在,字符存在,传入的数组为null等。
getIndex(null,‘a‘);
int getIndex(char[] arr,char key)
{
int index = -1;
if(arr ==null)
throw new IllegalArgumentException();
for(int i=0;i<arr.length;i++)
{
if(arr[i]==key)
{
index = i;
break;
}
}
return index;
}
====================================================================
26.
补足compare函数内的代码,不许添加其他函数。
class Circle
{
private double radius;
public Circle(double r)
{
radius=r;
}
public Circle compare(Circle cir)
{
//程序代码
return this.radius>cir.radius?this:cir;
}
}
class TC
{
public static void main(String[] args)
{
Circle cir1=new Circle(1.0);
Circle cir2=new Circle(2.0);
Circle cir;
cir=cir1.compare(cir2);
if(cir1==cir)
System.out.println("圆1的半径比较大");
else
System.out.println("圆2的半径比较大");
}
}
JAVA-day04-继承、多态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。