Skip to content

Latest commit

 

History

History
154 lines (91 loc) · 6.13 KB

java的三大特性.md

File metadata and controls

154 lines (91 loc) · 6.13 KB

1.继承

1.1继承的概念

继承是类与类的一种关系,是一种“is a”的关系。比如“狗”继承“动物”,这里动物类是狗类的父类或者基类,狗类是动物类的子类或者派生类。

java中的继承是**单继承,即一个类只有一个父类。**

1.2好处

子类可以通过继承拥有父类的所有属性和方法(除了private修饰的属性不能拥有)从而实现了实现代码的复用。

1.3重写父类方法

子类如果对继承的父类的方法不满意(不适合),可以自己编写继承的方法,这种方式就称为方法的重写。当调用方法时会优先调用子类的方法。

 重写要注意:

  a、返回值类型

  b、方法名

  c、参数类型及个数

 都要与父类继承的方法相同,才叫方法的重写。

 重载和重写的区别:

  方法重载:在同一个类中处理不同数据的多个相同方法名的多态手段。

  方法重写:相对继承而言,子类中对父类已经存在的方法进行区别化的修改。

1.4继承的初始化顺序

  1. 初始化父类再初始化子类
  2. 先执行初始化对象中属性,再执行构造方法中的初始化。

 基于上面两点,我们就知道实例化一个子类,java程序的执行顺序是:

 父类对象属性初始化---->父类对象构造方法---->子类对象属性初始化--->子类对象构造方法  

1.5final关键字

使用final关键字做标识有“最终的”含义。

  1. final 修饰类,则该类不允许被继承。

  2. final 修饰方法,则该方法不允许被覆盖(重写)

  3. final 修饰属性,则该类的该属性不会进行隐式的初始化,所以 该final 属性的初始化属性必须有值,或在**构造方法中赋值(但只能选其一,且必须选其一,因为没有默认值!),**且初始化之后就不能改了,只能赋值一次

  4. final 修饰变量,则该变量的值只能赋一次值,在声明变量的时候才能赋值,即变为常量

1.6super关键字

在对象的内部使用,可以代表父类对象。例如:

  1、访问父类的属性:super.age

   2、访问父类的方法:super.eat()

2.封装

2.1概念

封装就是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。(get/set)

2.2好处

  • 只能通过规定的方法访问数据。
  • 隐藏类的实例细节,方便修改和实现。 

2.3实现步骤

  1. 修改类属性的可见性
  2. 创建getter/setter方法
  3. 在getter/setter方法中加入属性控制语句

2.4四种访问修饰符作用范围

访问修饰符 本类 同包 子类 其它
private 可以
默认 可以 可以
protected 可以 可以 可以
public 可以 可以 可以 可以

2.5使用内部类

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。

作用:

  1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
  2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
  3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

内部类种类:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类  

3.多态

3.1概念

多态就是对象的多种形态。

java中的多态体现在以下两个方main:

  • 引用多态
  • 方法多态

3.2引用多态

  • 父类的引用可以指向本类的对象;
  • 父类的引用可以指向子类的对象;

示例代码如下:

public class multipleDemo {
    public static void main(String[] args) {
        Animal dog1 = new Animal(); //父类的引用指向本类
        Animal dog2 = new Dog(); //父类的引用指向子类
        //Dog ani = new Animal();报error
    }
}

上述代码Dog类是Animal类的子类。

为什么子类的引用不能用来指向父类的对象呢?

3.3方法多态

  • 创建本类对象时,调用的方法为本类方法;
  • 创建子类对象时,调用的方法为子类重写的方法或者继承的方法;

3.4多态总结

继承是多态的基础。

  • 父类引用可以指向子类对象,子类引用不能指向父类对象。
  • 把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。如Father father = new Son();
  • 把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。如father就是一个指向子类对象的父类引用,把father赋给子类引用son 即Son son =(Son)father;
  • upcasting 会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效
  • 向上转型的作用,减少重复代码,父类为参数,调有时用子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象编程思想。
  • 变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。