Day11 多态与final修饰符

学习内容

1.多态
2.final修饰符
多态

概述:

多态是同一个对象,在 不同时刻表现出来的不同状态。

前提:

要有继承或实现关系要有方法的重写,要有父类引用指向子类对象。

格式:

父类名称 对象名 = new 子类名称( )
成员中的成员方法的特点
成员方法:newd的谁,就用谁

成员访问特点:

成员变量编译看父类,运行看父类
成员方法编译看父类,运行看子类

多态的好处:

提高程序的扩展性,定义方法的时候使用父类型作为参数,在使用的时候,使用具体的子类型参与操作。

多态的转型

向上转型======父类引用指向子类对象就是向上转型
向下转型 ======格式:子类型 对象名=(子类型)父类引用
例如:

package com.hg.demo01;

public class demo012Multi {
	 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("=========");
	        
	        
	        Fu obj=new Zi();
	        obj.method();
	        obj.methodFu();  
	 }
}

package com.hg.demo01;

public class Fu {
public  void  method() {
	System.out.println("这是父类方法");
}
public  void  methodFu() {
	System.out.println("这是父类特有方法");
}
}
package com.hg.demo01;

public class Zi  extends  Fu {
	@Override
	public  void  method() {
	System.out.println("这是子类方法吧");
}
	public  void  methodZi() {
		System.out.println("这是子类特有方法吧");
	}
}

例如2:

package com.hg.demo02;

public class demo022Multi {
	public static void main(String[] args) {
		
		Fu obj=new  Zi();
		System.out.println(obj.num);
		 System.out.println("================");
		 obj.showNum();
}
}
package com.hg.demo02;

public class demo02MultiMethod {
	public static void main(String[] args) {
	
		Fu obj=new  Zi();
		obj.method();
		obj.methodZi();
		
	
	}
}

package com.hg.demo02;

public class Fu {
int num =10;
public  void  showNum() {
	 System.out.println("这是父类方法吧"+num);
}
public  void  method() {
		System.out.println("父类方法");
	}
		public  void  methodZi() {
			System.out.println("父类特有方法");
		}

}


package com.hg.demo02;

public class Zi  extends  Fu {
  int  num=20;
  int  age =16;
  public  void  showNum() {
	  System.out.println("这是子类方法吧"+num);
	  }
	  public  void  method() {
			System.out.println("子类方法");
		}
			public  void  methodZi() {
				System.out.println("子类特有方法");
			}
  }
  


例如3:

package com.hg.demo03;


	public abstract class Animal {
		 public Animal() {
		        System.out.println("=======");
		    }

		    public abstract void eat();

}

package com.hg.demo03;

public class Cat   extends   Animal{
	 public void eat(){
	        System.out.println("猫吃鱼");
	    }
	 public void catchMouse(){
	        System.out.println("猫捉老鼠");
	    }
}

package com.hg.demo03;

public class Demo03Instancof {
	public static void main(String[] args) {
        Animal animal = new Dog();
  animal.eat();
       if(animal  instanceof  Dog) {
    	   Dog  dog=(Dog)  animal;
           dog.watchMouse();
       }
  
       if(animal  instanceof  Cat) {
           Animal animal1 = new Cat();

          
           Cat  cat=(Cat)  animal1;
           cat.catchMouse();}
       }
        
    }


package com.hg.demo03;



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

       
        Cat  cat=(Cat)  animal;
        cat.catchMouse();
    }
}


package com.hg.demo03;

public class Dog  extends  Animal{
	 public void eat(){
	        System.out.println("狗啃骨头");
	    }
	 public void watchMouse(){
	        System.out.println("看老鼠");
	    }
}

final修饰符

定义:

final修饰符可用于类、方法和变量。用final修饰的类不能被扩展,也就是表示类不可被继承。final用于变量前,表示它是只能一次赋值的变量,如果初始化了,则就是常量,即final修饰的变量的内容不可更改。因此,声明final修饰的变量时必须将其初始化。声明为final的变量不会在每个实例中都占用内存,即可以认为final修饰的变量就像是常量。

final修饰符

①用来修饰一个类
②用来修饰一个方法
③用来修饰一个局部变量
④用来修饰一个成员变量
例如:

package com.hg.demo04;

public class Demo04Final {
	 public 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(num1);
		 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(stu2.getName());
				 
	 }
}

package com.hg.demo04;

public  abstract class Fu {
	public   final void  method() {
		System.out.println("父类方法");
	}
public   abstract void methodAbs();
}

package com.hg.demo04;

public class MyClass {
public void  method () {
System.out.println("方法执行");
}
}
package com.hg.demo04;

public class MySubClass {

}

package com.hg.demo04;

public class Person {
private  final  String name;
public  Person() {
	name="王源";
}
public  Person(String  name) {
	this.name=name;
	
}
public  String  getName() {
	return  name;
}
}

package com.hg.demo04;

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;
}
}
package com.hg.demo04;



	public class Zi  extends  Fu {
	public  void methodAbs() {}	
}

上述代码运行结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2020080605041

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值