一.多态
1.多态的概念,多态中调用成员方法的特点
1.有了封装才有面向对象,有了面向对象才有继承和多态。
2.继承是多态的前提条件,没有继承就没有多态
3.多态--对象的多种形态
4.
5.
package com.itheima.duotai; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void show(){ System.out.println(name+","+age); } }
package com.itheima.duotai; public class Teacher extends Person{ @Override public void show() { System.out.println(getName()+","+getAge()); } }
package com.itheima.duotai; public class Administrator extends Person{ @Override public void show() { System.out.println(getName()+","+getAge()); } }
package com.itheima.duotai; public class Student extends Person{ @Override public void show() { System.out.println("学生的信息为"+getName()+","+getAge()); } }
package com.itheima.duotai; public class Text { public static void main(String[] args) { Student s=new Student(); s.setName("zhangsan"); s.setAge(18); register(s); Teacher t=new Teacher(); t.setName("wang"); t.setAge(15); register(t); Administrator a=new Administrator(); a.setAge(14); a.setName("zhu"); register(a); } public static void register(Person p){ p.show(); } }
package duotaiDemo; public class Text { public static void main(String[] args) { Animal a=new Dog(); System.out.println(a.name); } } class Animal{ String name="动物"; public void show(){ System.out.println("Animal-------show方法"); } } class Dog extends Animal{ String name="狗"; @Override public void show() { System.out.println("Dog----------show方法"); } } class Cat extends Animal{ String name="猫"; @Override public void show() { System.out.println("Cat----------show方法"); } }
加载字节码文件--先加载父类,再加载子类,父类的父类--object
2.多态的优势和弊端
object--顶级父类,所有的都继承与object
多态的弊端--不能调用子类的特有方法。
异常exception
instanceof--判断是属于哪个类()
package duotaiDemo; public class Text { public static void main(String[] args) { Animal a = new Dog(); System.out.println(a.name); a.show(); Animal bo=new Cat(); bo.show(); // Cat cwm=(Cat)bo;//解决方案:变为子类类型 // cwm.eathouse(); if(bo instanceof Dog){ Dog cwg=(Dog)bo; cwg.eatgt(); } else if(bo instanceof Cat ){ Cat cwm=(Cat)bo; cwm.eathouse(); }else{ System.out.println("没有这个类型"); } } } class Animal { String name = "动物"; public void show() { System.out.println("Animal-------show方法"); } } class Dog extends Animal { String name = "狗"; @Override public void show() { System.out.println("Dog----------show方法"); } public void eatgt(){ System.out.println("狗吃骨头"); } } class Cat extends Animal { String name = "猫"; @Override public void show() { System.out.println("Cat----------show方法"); } public void eathouse(){ System.out.println("猫吃老鼠"); } }
3.多态的综合练习
二.包和final
1.包
1.
2.
3.
2.final
final可以修饰方法,类,变量
final--规则--不想让别人去改变
iml--配置文件
三.权限修饰符
四.代码块
局部位置:写在方法里面的单独的大括号
局部代码块:提前结束变量生命周期
本质--节约内存 用完回收,不浪费内存
构造代码块:空参构造和带参构造中共有的代码提取出来
弊端:太死不够灵活,改造方法如下:
静态代码块--在程序刚开始的时候,做数据的静态初始化。
main方法也可以被调用