【注意,本人小白一个,以下是个人根据教程的理解,如有疑惑,出错的地方,希望大家能够留言指出来,相互学习进步。】
多态与动态绑定
根据教程内容的介绍,多态是:多态是指同一个方法根据上下文使用不同的定义的能力。之前讲过的方法覆写以及前面的方法重载都可被看做是多态。教程中多态的学习是要和动态绑定一起的,动态绑定是一种机制,教程中是这样说的:“对一个已经被重写的方法的调用将会发生在运行时,而不是在编译时解析。”其实在这里看到的教程介绍不是很明白,也很模糊,于是在网上寻找,看到知乎有个关于多态的讨论,里面的答案很清晰明白,因为介绍多态的内容很多,知乎又是很注重版权的,(没有想过直接复制粘贴这种流氓盗版行为),刚开始想申请版权转载,但是好的内容太多了,一个一个去申请版权转载有些繁琐,所以这里给出链接,可以去看看。真的这个问题讨论的不错,很容易理解。
真的很棒,很容易理解,忍不住再说一次。
final关键字
教程中说到final关键字的使用是然修饰的类不能被继承,但是没有说明是为什么,再查询网上的一些资料看过后,个人理解是处于安全考虑,或者被修饰的类不想被继承,所以用final来修饰,第一个解答还明白为什么,但是第二个就有点蒙了,也就只能当做了解一下了,还有,被final修饰的类里面的成员方法默认也是被修饰的为final方法的。从这里也就是能知道,final也是能修饰方法的,也就是说这个方法不能被重载了。
final除了能修饰类、方法之外,最多出现的是修饰变量,而修饰的变量有个特点,一旦初始化,这个变量就不能被改变了。
final修饰类的格式:
final class 类名 extends 父类{
//类体
final修饰方法格式:
修饰符 final 返回值类型 方法名(){
//方法体
}
public final void run(){
//方法体
}
(final内容参考与:浅谈Java中的final关键字)
抽象类
根据教程上的介绍,抽象类给我的感觉是说话不做事的,他是叫其他人做事情的,官方的介绍是:“抽象类是指在类中定义方法,但是并不去实现它,而在它的子类中去具体的实现。”
抽象类的定义:
定义抽象类是通过关键字“abstract”
修饰符 abstract 类名{
//类体
}
除了类,还可以定义抽象方法:
修饰符 abstract 返回值类型 方法名();
有个注意事项:在抽象类中的方法不一定是抽象方法,但是含有抽象方法的类,一定是抽象类。
例子:
//抽象类的声明
abstract class Animal {
String type;
String name;
int age;
int weight;
void eat() {
System.out.println("动物爱吃饭");
}
abstract void breath();
void sleep() {
System.out.println("动物在睡觉");
}
}
// Tiger 继承抽象类 Animal
class Tiger extends Animal {
String tigerType;
String from;
void tigerRun() {
System.out.println("老虎在奔跑");
}
void breath() {
System.out.println("老虎是用肺呼吸的");
}
}
class Fish extends Animal {
String fishType;
void swim() {
System.out.println("鱼在游泳");
}
void breath() {
System.out.println("鱼是用腮呼吸的");
}
}
// 通过该类演示对象的构造过程
public class TigerDemo {
public static void main(String[] args) {
Animal animal1 = new Fish();
animal1.breath();
Animal animal2 = new Tiger();
animal2.breath();
}
}
运行结果:
鱼是用腮呼吸的
老虎是用肺呼吸的
个人感觉和多态类似(应该是多态吧),这里要注意,不能直接调用子类的方法,要转换类型成子类本身才能调用子类的方法。
((Fish) animal1).swim();
((Tiger) animal2).tigerRun();
Object类
在教程中,说了一种类,这个类是全部类的“爸爸”,这个类是“Object类”。如果定义了一个类,而这个类没有去继承其他的类,那么,这个类将会默认的继承Object类,从而继承它里面的方法,但是如果一个类继承了一个父类,那这个父类没有继承其他的父类的话,这个父类就会默认继承Object类,总而言之,是个类,就会继承Object类。
object类中有一些常用的方法,分别是toString()、equals(),这两个很常用,
toString()是取得对象信息的方法、equals()是比较两个对象是否相等
在教程中看到的介绍不是很容易理解,再网上看到一个博客中写得清楚,地址:Object类及其常用方法简介