学习内容
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