public class Test1 {
public static void main(String[] args){
Unicycle unicycle = new Unicycle("Unicycle");
Bicycle bicycle = new Bicycle("Bicycle");
Tricycle tricycle = new Tricycle("Tricycle");
Cycle.ride(unicycle);
Cycle.ride(bicycle);
Cycle.ride(tricycle);
}
}
class Cycle{
private String name;
public Cycle(String str){
name = str;
}
public static void ride(Cycle c){
System.out.println(c.name + "is riding");
}
}
class Unicycle extends Cycle{
private String name;
public Unicycle(String str) {
super(str);
name = str;
}
}
class Bicycle extends Cycle{
private String name;
public Bicycle(String str) {
super(str);
name = str;
}
}
class Tricycle extends Cycle {
private String name;
public Tricycle(String str) {
super(str);
name = str;
}
}
public class Test234 {
private static RandonShapeGenerator gen = new RandonShapeGenerator();
public static void main(String[] args){
Shape[] shapes = new Shape[9];
for (int i = 0; i < shapes.length; i++) {
shapes[i] = gen.next();
}
for (Shape s :
shapes) {
s.draw();
s.newMethod();//每个子类都调用了一次添加的新方法,
// 因为子类继承父类自然把所有方法都继承过去了,只不过没有显示出来,
// 其实是隐式的存在的,子类调用的其实是继承自父类的没有重写的方法,
// 看起来像是调用了父类的方法
}
Shape s = new Recf();//这里是声明了一个Shape类型的引用,但实际的对象还是Recf.
s.draw();//输出的是Recf类重写的方法,证明多态对新类的作用于在旧类中是一样的
}
}
class Shape{//基类
public void draw(){}
public void erase(){}
public void newMethod(){
System.out.println("new method");//添加的新方法
}
}
class Circle extends Shape{
@Override//添加注解,一般IDE可以自动添加
public void draw() {
System.out.println("draw circle");
}
@Override
public void erase() {
System.out.println("erase circle");
}
}
class Square extends Shape{
@Override
public void draw() {
System.out.println("draw Square");
}
@Override
public void erase() {
System.out.println("erase Square");
}
@Override
public void newMethod() {
System.out.println("Square new method");
//重写后该类输出内容就发生改变,没有重写时该类的该方法与父类运行结果相同
//无论重写与否,其实调用的都是自身的方法
//只是没有重写时方法调用结果与父类的相同
}
}
class Triangle extends Shape{
@Override
public void draw() {
System.out.println("draw Triangle");
}
@Override
public void erase() {
System.out.println("erase Triangle");
}
}
class Recf extends Shape{//新添加的方法
@Override
public void draw() {
System.out.println("recf draw");
}
@Override
public void erase() {
System.out.println("recf erase");
}
}
class RandonShapeGenerator{//是一种工厂,用以随机获取一种Shape的子类
private Random rand = new Random(100);
public Shape next(){
switch (rand.nextInt(3)){
default:
case 0:return new Circle();
case 1:return new Square();
case 2:return new Triangle();
}
}
}
public void wheels(){
System.out.println("轮子数量是" + num);
}
unicycle.wheels(); bicycle.wheels(); tricycle.wheels();
public class Test678 {
public static void main(String[] args){
Instrument[] orchestar = {
new Wind(),
new Percussion(),
new Stringed(),
new Brass(),
new Woodwing()
};
tuneAll(orchestar);
newInstrument ni = new newInstrument();
ni.play(Note.B_FLAT);//验证多态性是否适用于所添加的新类型,答案是确实适用。
}
public static void tune(Instrument instrument){
instrument.play(Note.MIDDLE_C);//无论传进声明子类,都播放MIDDLE_C
}
public static void tuneAll(Instrument[] e){
for (Instrument i :
e) {
tune(i);
System.out.println(i.toString());
}
}
}
class RandomInsFactory{//工厂类,用于随机生成一个Instrument的子类
private Random ran = new Random(47);
public Instrument next(){
switch (ran.nextInt(5)){
default:
case 0:return new Wind();
case 1:return new Percussion();
case 2:return new Stringed();
case 3:return new Brass();
case 4:return new Woodwing();
case 5:return new newInstrument();
}
}
}
enum Note{//枚举类,存放了哪些音乐
MIDDLE_C,C_HARPE,B_FLAT;
}
class Instrument {
void play(Note note){
System.out.println("Instrument.play() : " + note);
}
String what(){
return "Instrument";
}
void adjust(){
System.out.println("adjusting Instrument");
}
@Override
public String toString() {
// /添加一个toString方法,调用当前what方法,
// 子类会自动继承该方法并分别返回给自what()里的内容
return what();
}
}
class Wind extends Instrument{
@Override
void play(Note note) {
System.out.println("Wind.play() : " + note);
}
@Override
String what() {
return "Wind";
}
@Override
void adjust() {
System.out.println("adjusting Wind");
}
}
class Percussion extends Instrument{
@Override
void play(Note note) {
System.out.println("Percussion.play() : " + note);
}
@Override
String what() {
return "Percussion";
}
@Override
void adjust() {
System.out.println("adjusting Percussion");
}
}
class Stringed extends Instrument{
@Override
void play(Note note) {
System.out.println("Stringed.play() : " + note);
}
@Override
String what() {
return "Stringed";
}
@Override
void adjust() {
System.out.println("adjusting Stringed");
}
}
class Brass extends Wind{//继承自Wind
@Override
void play(Note note) {
System.out.println("Brass.play() : " + note);
}
@Override
void adjust() {
System.out.println("adjusting Brass");
}
}
class Woodwing extends Wind{
@Override
void play(Note note) {
System.out.println("Woodwing.play() : " + note);
}
@Override
String what() {
return "Woodwing";
}
}
class newInstrument extends Instrument{//新添加的类型
@Override
void play(Note note) {
System.out.println("newIns.play()" + note);
}
}
public class Test10 {
public static void main(String[] args){
jilei j = new daochulei();//创建导出类的对象并转型为基类
j.first();//调用第一个方法
//结果输出daochulei is running
//原因,就像前面提过的,导出类继承了基类的所有东西,没有重写的方法隐藏了起来
//其实在daochulei中还隐士的有void first()这个方法里调用了自身重写的second()
//当daochulei调用first()方法后,它就调用了自身重写的second()方法。
//导出类调用基类方法其实不是真的调用,而是调用自身继承自基类的方法,
// 只不过这个方法没重写时,内部形式与基类相同
}
}
class jilei{
void first(){//调用第二个方法
second();
}
void second(){
System.out.println("first is running");
}
}
class daochulei extends jilei{
@Override
void second() {
System.out.println("daochulei is running");
}
}
public class Test912 {
public static void main(String[] args){
new Hamster();
}
}
class Rodent{
public Rodent(){
shanghai = 100;
System.out.println("Rodent");
}
private int shanghai;
public void bite(){
System.out.println("造成伤害" +shanghai + "点" );
}
}
class Mouse extends Rodent{
private int sh;
public Mouse(){
sh = 1000;
System.out.println("Mouse");
}
@Override
public void bite() {
System.out.println("造成伤害" +sh + "点" );
}
}
class Gerbil extends Mouse{
private int shang;
public Gerbil(){
shang = 2000;
System.out.println("Gerbil");
}
@Override
public void bite() {
System.out.println("造成伤害" +shang + "点" );
}
}
class Hamster extends Gerbil{
private Mouse mouse = new Mouse();//成员对象
//该类初始化输出结果
//Rodent
// Mouse
// Gerbil
// Rodent
// Mouse
// Hamster
//可以分析出,初始化时先调用基类的构造方法,
// 然后初始化成员变量,因为其中有Mouse这个成员对象,所有对Mouse进行初始化,
// 完成后再调用自身的构造方法
private int hai;
public Hamster(){
hai = 3000;
System.out.println("Hamster");
}
@Override
public void bite() {
System.out.println("造成伤害" + hai + "点" );
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有