【Java要点】3. 继承、多态、抽象类与接口、修饰符

转发请在文章中提供本文的链接,谢谢!

一、 继承

1.1 继承的优缺点

*继承使得类与类之间产生了关系,即父-子类的关系。从而有效地提高了代码的复用性和可维护性,并为多态性提供了基础。

*不过,继承也带来了耦合性增强等弊端。

1.2 java的继承特点

*与C++不同,java并不支持多继承,以防止语义上出现混乱。因此,对于一个java类而言,它只能有一个直接父类。

*子类只能继承父类所有非私有(private)的成员方法和成员变量。

*子类不能继承父类的构造方法,但是可以通过super去访问父类构造方法。(注意,调用super应位于子类构造方法的最开始位置!)

1.3 super关键字

super代表了当前对象的父类的引用,在以下场景中有使用:

*①调用父类成员方法,用法:super.superMethod();

*②调用父类构造方法,用法:super();  

*③调用父类成员变量,用法:……super.superField;

注意:子类中所有的构造方法默认都会访问父类中空参数的构造方法,因此如果我们只需要对父类成员进行默认初始化的话,无需显示调用super();但是,如果我们需要对父类成员执行有参初始化,或者父类本身没有无参构造方法的话,就应该显式地调用super(para……);

1.4 方法重写

*方法重写:子父类出现了一模一样的方法,此时子类就重写了父类对应的方法。

特点:

*父类中私有方法不能被重写。

*子类重写父类方法时,访问权限不能更低,最好一致。(public→public)

*父类静态方法,子类也必须通过静态方法进行重写。(static→staitc)

*子类重写父类方法的时候,最好声明一模一样。

*Q:方法重载(overload)和方法重写(override)的区别?

  A: 方法重写指的是子类中出现了和父类中方法声明一模一样的方法,此时子类该方法就替代了父类对应方法的功能。这里的“一模一样”指的是返回值和参数列表完全相同

      方法重载则指的是同类中出现了方法名一样,参数列表不同的方法(同返回值没有关系)

1.5 final关键字

 * 修饰类时,类不可被继承;
 * 修饰变量时,变量就变成了常量,只能被赋值一次,此后不可被修改。需要注意的是,当final修饰基本数据类型时,该变量的“值”将不可被修改;而当final修饰引用数据类型时,其引用值(地址)将不可被修改,但是该引用所指向对象的属性仍然可以修改;
 * 修饰方法时,该方法不能被重写。


二、多态

2.1 什么是多态

*多态:事物存在多种形态。当父类引用指向子类对象时,会根据其实际类的不同,动态地决定调用哪个方法。

*多态的前提:①发生了继承(出现了父子类);②发生了方法重写;③父类引用指向子类对象。

2.2 多态中的成员访问特点

*成员变量:编译看左边(父类),执行看左边(父类);

*成员方法:编译看左边(父类),执行看右边(子类);

*静态方法:编译看左边(父类),执行看左边(父类);(静态与类相关,本身就没有发生重写)

2.3 多态的好处和弊端

*好处:提高了代码的维护性(由继承来保证)和扩展性(由多态来保证,比如方法接口调用时,形参为父类,实参为子类)。

*弊端:不能使用子类特有的属性和方法。


三、 抽象类和接口

3.1 抽象类的特点

*abstract来修饰类名或者方法名:

  abstract class MyClass{} //抽象类

  puclic abstract void myMethod();//抽象方法

*抽象类不一定有抽象方法;有抽象方法的类必定是抽象类或者接口。

*抽象类不可实例化,而是应该由其非抽象的子类来完成实例化。

*抽象类的子类,要么继续作为抽象类,要么成为非抽象类,但此时必须将父类所有的抽象方法进行了重写。

3.2 接口的特点

*这里的接口指的是java中的interface,声明方法: interface MyInterface{}

*类实现接口的办法:class MyClass inplements MyInterface{}

*接口的子类既可以是抽象类,也可以是具体类。

*一个接口可以继承多个接口;一个类可以实现多个接口;(想想原因)

3.3 接口的成员特点

*接口的成员变量:必须是常量、staitc静态的、public公共的。

*接口的构造方法:接口没有构造方法。

*接口的成员方法:必须是抽象方法。


四、 修饰符总结

4.1 四种权限修饰符

表1. 四种权限修饰符的比较
  本类  同一个包下(子类和无关类) 不同包下(子类) 不同包下(子无关类)
private      
(默认)    
protected  
public

4.2 常见修饰符

* ①:修饰符主要有:
    * 权限修饰符:private,默认的,protected,public
    * 状态修饰符:static,final
    * 抽象修饰符:abstract
* ②:类可用的修饰符:
    * 权限修饰符:默认修饰符,public
    * 状态修饰符:final
    * 抽象修饰符:abstract  
* ③:成员变量可用的修饰符:
    * 权限修饰符:private,默认的,protected,public
    * 状态修饰符:static,final
* ④:构造方法可用的修饰符:
    * 权限修饰符:private,默认的,protected,public
* ⑤:成员方法可用的修饰符:
    * 权限修饰符:private,默认的,protected,public
    * 状态修饰符:static,final
    * 抽象修饰符:abstract
* ⑥:常见的组合规则:
    * 成员变量:public static final
    * 成员方法:
        * public static 
        * public abstract
        * public final

猜你喜欢

转载自blog.csdn.net/gsafjhbfqwergerkbvgk/article/details/81604680
今日推荐