多态的概述
(1)面向对象三大特征:封装性,继承性,多态性。
(2)extends继承或者implement实现,是多态性的前提。
(3)多态:是指同一行为,具有多个不同表现行式。(4)代码中体现多态:父类应用指向子类对象格式 父类名称 对象名 =new 子类名称();
(5)访问成员变量的两种方式
1.直接通过对象名称访问
2.通过成分方法简介访问
final 修饰符
(1)final修饰符可应用于类、方法和变量。用final修饰的类不能被扩展,也就是表示类不可被继承,final用于变量前,表示它是只能一次赋值的变量,如果初始化了,则就是常量,即final修饰的变量的内容不能更改,因此声明为final修饰的变量时,必须将其初始化,声明为final的变量不会在每个实例中都占用内存即可以认为final修饰的变量就像是常量。
(2)通常的做法是为final修饰的变量选择大写的标识符。
(3)当修饰符final应用于方法时,意味着该方法不能被重写,如果对象已声明为final,则对该对象的引用不能更改,但他的值可以更改。
(4)修饰一个类,修饰一个方法,修饰一个局部变量,修饰一个成员变量。
(5)①由于成员变量具有默认值,所以使用final和必须手动赋值。②对于final的成员变量要么直接赋值,要么通过构造方法进行赋值。
代码与成果
demo01
package com.hg.demo01;
public class Dem012Multi {
public static void main(String[] args) {
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("子类特有方法");
}
}
demo02
package com.hg.demo02;
public class Demo02MultiField {
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.methodFu();
}
}
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 methodFu() {
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("子类特有方法");
}
}
demo03
package com.hg.demo03;
public abstract class Animal {
public abstract void eat();
}
package com.hg.demo03;
public class Cat extends Animal{
@Override
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();
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();
}
}
}
package com.hg.demo03;
public class Demo03Main {
public static void main(String[] args) {
Animal animal=new Cat();
animal.eat();
Cat cat=(Cat) animal;
cat.catchMouse();
}
}
package com.hg.demo03;
public class Dog extends Animal {
@Override
public void eat() {
System.out.println("狗吃骨头");
}
public void watchHouse() {
System.out.println("狗看门");
}
}
demo04
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=2000;
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());
}
}
package com.hg.demo04;
public abstract class Fu {
public final void method() {
System.out.println("父类方法");
}
public abstract /*final*/ void methodAbs();
}
package com.hg.demo04;
public class MyClass {
public void method() {
System.out.println("方法执行");
}
}
package com.hg.demo04;
public class MySubClass /*extends MyClass*/{
}
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() {}
}