写在前面
不负众望,今天算是把三大特征结束了。看了看600多页的Java核心技术卷I,看了看二三十章的汤小洋的视频课,哎 路还很长。一周一大章,哎,慢慢来吧,慢慢来吧。今天也没啥好说的,直接上码吧。
今日所学(多态)
概念:具有表现多种形态的能力的特殊,一种事物具有多种形态。
1.引用类型之间的转换
自动类型转换
- 将子类对象转换父类。
- 将父类的引用指向子类的对象(向上转型)。
特性:
- 通过父类引用变量调用的方法是子类重写的后的方法,不是父类的方法。
- 通过父类引用变量无法访问子类特有的属性和方法。
强制类型转换
将一个指向子类的父类引用给一个子类引用(向下转型),必须进行强制类型转换。
语法:(子类类型)指向子类对象的父类引用。
特性:
- 向下转型后,可以访问子类特有的属性和方法必须转换为父类真实指向的类型。
- 向下转型是不安全的,可以在转换时使用instanceof操作符判断对象的类避免类型转换异常。
多态的实现:将父类作为方法形参,将子类的对象作为方法实参,从而实现多态。
放我练习的代码
package 多态; public class Person { String name; public Person(String name) { this.name = name; } public void play(Pet pet) { pet.show(); pet.play(); } }
package 多态; public class Pet { String name; String sex; String like; public Pet() { System.out.println("这是一只宠物"); } public Pet(String name,String sex,String like) { this.name = name; this.sex = sex; this.like = like; } public void show() { System.out.println("这是一只宠物"); } public void play() { System.out.println("宠物在玩耍"); } }
package 多态; public class Dog extends Pet { public Dog() { } public Dog(String name, String sex, String like) { super(name, sex, like); } @Override public void show() { System.out.println("这是一直名叫"+name+"的狗"); } @Override public void play() { System.out.println(name+"在玩耍"); } }
package 多态; public class Cat extends Pet{ public Cat() { } public Cat(String name, String sex, String like) { super(name, sex, like); } @Override public void show() { System.out.println("这是一只名叫"+name+"的猫"); } @Override public void play() { System.out.println(name+"在玩耍"); } }
package 多态; public class Test { public static void main(String[] args) { Person person = new Person("pipian"); Dog dog = new Dog("陈蓉","母","吃"); person.play(dog); } }
final关键字
final表示最终的,可以用来修饰变量、方法和类。
1.修饰变量
- 被final修饰的变量,称为常量constant
- 被static final修饰的变量,称为静态变量
常量命名规范:所有字母全大写,多个单词之间使用下划线连接。
抽象类(好难懂)
1.概念
被abstract修饰的类,称为抽象类。
定义方法:public abstract class 类名 { }
抽象类不能被实例化,即不能使用new创建对象,只能被继承。(我是你们所有父亲,你们都要继承我的衣钵。。。)
被abstract修饰的方法,称为抽象方法。
定义方式:public abstract 返回值类型 方法名()
抽象方法只有声明,没有具体实现(方法体)
特性
- 抽象类可以有抽象方法,也可以没有。
- 含有抽象方法必须是抽象类。
- 子类继承抽象类后,必须全部重写所有抽象方法。
抽象类中可以有构造方法,但不是用来创建对象的,而是用来初始化成员属性的。
后来所感
今天好像貌似学的不是很多...有的东西比较难理解,看的时间就比较长了...
明天把泛型数组列表和反射总结一下。