学习java的第11天

多态性

多态性是指“多种形式”。

为了更好的理解多态性的概念。下面有一个图,一个名为Shape的父类,从该类派生出3个不同的类:Triangle(三角形)、Rectangle(矩形)和Pentagon(五边形)。父类Shape中的方法Draw()在每个子类中都被具体化为画一个特定类型的形状,在前面的讲解中这称为泛化/特化,在编程术语中,这称为“方法重写”。
在这里插入图片描述
定义一个对象…obj作为子类…的事例,并用它实现Shape类。这样做是完全可以的,在实现多态性时,可以创建一个带有父类的对象,但该对象的实际实现是…子类的,也就是说可能认为该对象为Shape类型,并且具有…类型的引用,声明这种对象的代码如下:
Shape Pentagon Obj =new Pentagon();
下面是一些代码实例
/*
*

  • 代码中体现多态:父类应用指向子类多象

  • 格式

  • 父类名称 对象名 =new 子类名称 ();

  • */
    public class Demo0112Multi {
    public static void main(String[] args) {
    //类型 变量名称=常量
    //int num=5;
    //
    Fu fu =new Fu();
    fu.method();
    fu.methodFu();

    System.out.println("====");
    Zi zi=new Zi();
    zi.method();
    zi.methodFu();
    zi.methodZi();

    System.out.println("====");
    //类似于强制类型转换
    //double num =5f
    Fu obj=new Zi();
    obj.method();//子类方法
    obj.methodFu();
    //obj.methodZi();
    }
    }

public class Fu {
public void method() {
System.out.println(“父类方法”);

}
public void methodFu() {
System.out.println(“子类方法”);
}
}

public class Zi extends Fu{

public void method() {
	   System.out.println("子类方法");
}
public void methodFu() {
	   System.out.println("父类特有方法");

}
public void methodZi() {
System.out.println(“子类特有方法”);
}
}
运行结果

在这里插入图片描述
/*

  • 访问成员变量的两种方式
  • 1.直接通过
  • 2.通过成分方法直接访问

*/
public class Demo02MultiField {
public static void main(String[] arge) {
//直接访问 看等号左边是谁,就用谁 没有则向上找
Fu obj=new Zi();
System.out.println(obj.num);//父 10
//System.out.println(obj.age);错误用法
System.out.println("====");
//成员访问法 看该方法属于谁,就用谁
obj.showNum();
}

}

//成员方法

//new 的是谁,就先用谁
//对比
//成员变量 编译看左边 运行还看左边
//成员变量 编译看左边 运行看右边
public class Demo02MultiMethod {
public static void main(String[] args) {
Fu obj=new Zi();

	obj.method();
	//obj.methodFu();
	obj.methodFu();
	
}

}

public class Fu {
int num=10;

public void showNum() {
System.out.println("子类方法"+num);
}
public void method() {
	   System.out.println("父类方法");
	   
   }
   public void methodFu() {
	   System.out.println("子类方法");
   }

}

public class Zi extends Fu{
int num =20;
int age =16;
public void shownum() {
System.out.println(“子类方法”+num);

}
public void methodZi() {
	System.out.println("子类方法");
}

}
运行结果
在这里插入图片描述

public abstract class Animal {
public abstract void eat();

}

public class Cat extends Animal{
@Override
public void eat() {
System.out.println(“猫吃鱼”);
}

public void catchMouse() {
	System.out.println("猫抓老鼠");

}
}

public class Demo03Instancof {
public static void main(String[] args) {
Animal animal =new Dog();

	animal.eat();
	giveMeAPet(animal);
}
public static void giveMeAPet(Animal animal)
{
	
	if( animal instanceof Dog)
	{
		Dog dog=(Dog)animal;
		dog.watchHouse();
		
	}
	if( animal instanceof Cat)
	{
		Cat cat=(Cat)animal;
		cat.catchMouse();
		
	}
}

}

//向上类型转换 总是安全的.但是也有缺陷 原来特有功能不能使用
public class Demo03Main {
public static void main(String[] args) {

//类似于 隐式类型转换
Animal animal =new Cat();
animal.eat();
//向下类型转换 由父类型 转换子类型 还原
Cat cat = (Cat) animal;
cat.catchMouse();

}

}

public class Dog extends Animal{
@Override
public void eat() {
System.out.println(“狗吃骨头”);

}
public void watchHouse() {
System.out.println(“狗看门”);
}
}
运行结果
在这里插入图片描述

/*

  • final

  • 1.用来修饰一个类

  • 用来修饰一个方法

  • 用来修饰一个局部变量

  • 用来修饰一个成员变量
    */
    public class Demo04Final {
    private static void main(String[] args) {

     int num1=10;
     System.out.println(num1);
     num1=100;
     System.out.println(num1);
     
     final int num2=200;
     System.out.println(num2);
     final int num3;
     		num3=300;
     System.out.println("===");
     
     Student stu1= new Student("郑志丹");
     System.out.println(stu1);
     System.out.println(stu1.getName());
     
     stu1=new Student("鹿晗");
     System.out.println(stu1);
     System.out.println(stu1.getName());
     
     System.out.println("=====");
     
     final Student stu2=new Student("关晓彤");
     System.out.println(stu2);
     System.out.println(stu2.getName());
     
     stu2.setName("高圆圆");
     System.out.println(stu2);
     System.out.println(stu2.getName());
     
     System.out.println("=====");
     Person person=new Person("鹿晗");
     System.out.println(person.getName());
    

    }

}

//final修饰方法的时候 该方法就是最终方法 不能被重写
public abstract class Fu {
public final void method() {
System.out.println(“父类方法”);
}

public abstract void methodAbs();

}

public class MyClass {
public void method() {
System.out.println(“方法执行”);
}

}

public class MySuClass /extends MyClass/{

}

public class Person {
private final String name;

public Person() {
	name="毛晓彤";
}
public Person(String name) {
	this.name =name;

}
public String getName() {
return name;
}

}

public class Zi extends Fu{
/*
@Override
public void method() {
System.out.println(“子类方法”);
}*/
public void methodAbs() {

}
}

public class Student {
private String name;

public Student() {
	
}
public Student(String name) {
	this.name =name;
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name =name;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值