想了很久,简书的第一篇文章写些什么好,自己是个技术小白,讲不了什么高深的技术,那就来聊聊我所认知的一些JAVA技术知识。
继承
Java是面向对象程序设计语言。(什么是面向对象,在这里就不唠叨了),而Java程序是什么?就是通过继承、组合对象形成的一套问题解决方案。通过继承可以纵观JAVA语言的所有特性。
继承是面向对象编程技术的基石(将复杂问题简单化)。也是后面所要讲的多态和抽象的前提。通俗来讲,继承是一个对象从另一个对象获取属性的过程(除了private属性以外),类之间就形成了所谓的等级关系。
继承有以下几个特点:
- 单一继承(解决了谁是“母亲”的问题)
- IS-A问题(解决了继承和组合的问题)
- Java所有类都隐式继承Object基类;
- extends 与 Implement关键词
多态
什么是多态?同一种行为具有不同表现形态或者形式的能力这是官方的解释,听起来一头雾水。我的理解是:多态是对象的多种表现形式,即向上转型。
多态的前提是:
- 继承
- 动态绑定
有人问什么是动态绑定,《Java编程思想》给出这样的解释:
在在运行时根据对象的类型进行绑定,而与之相反的是前期绑定,编译时就确定类型。>
有人又问,Java不是动态编程语言,怎么实现动态绑定呢?这是Java语言的一个特点——反射机制(后续更新文章会讲述)
看栗子:
public class Animal{
public Animal(){
}
public void move(){
System.out.println("Animal move");
}
}
public class Dog extends Animal{
public String name;
public Dog(String name){
this.name=name;
}
public void move(){
System.out.println(name+"move");
}
public void eat(){
System.out.println(name+"eat");
}
}
public class Test{
public static void main(String[] args){
Animal dog1=new Dog("dog1");
dog1.move();
//dog1.eat();错误
Dog dog2=new Dog("dog2");
dog2.move();
dog2.eat();
}
}
执行以上程序,输出结果为:
dog1.move;
dog2.move;
dog2.eat;
-
为什么Animal对象 dog1 输出的是dog1.move,而不是Animal.move,这是因为JAVA语言在运行的时候才确定dog1所指向的对象是Dog,Dog向上转型为Animal
-
dog1引用依旧是Animal,Animal是没有eat()方法的,所以dog1.eat()无法调用。记得前面继承所讲的么,dog1 IS-A Animal,但Animal is not a Dog。
抽象
抽象类,我的理解是,无法创建具体对象的类是抽象类,抽象类只是一个特殊的类,既然是JAVA中的类,那么就具有其所有的特点:继承、多态、重写重载等;
作用:
- 逻辑接口与实现分离,结构化;
- 完全解耦,向上转型;
应用:
- 适配器设计模式;
- 工厂设计模式;
特点:
- 包含着abstract 方法的类都是抽象类,抽象类用abstract 来修饰
- 因为抽象类不能实例化,所以必须被继承;
- 接口是极度抽象化的类;
- 任何子类必须重写父类的抽象方法;
详情: - 详情请看《Java编程思想》
网友评论