JAVA 概念记忆-继承 多态 抽象类 接口

重载和重写的区别

    方法重载是一个类中有多个同名函数存在,具有不同的参数

    在子类中定义一个与父类中方法同名同参的方法

构造方法

    写一个带参构造方法时,需要把无参的构造函数也写上,否则无法new无参构造方法

    子类未声明构造方法时,执行父类的无参构造方法

    子类有声明构造方法时,先执行父类的无参构造方法,再执行子类的构造方法

    子类需要调用父类有参构造方法时,在子类构造方法的第一行使用super

    一个类种多个构造方法,调用其他构造方法使用this

多态

    继承 方法重写 向上转型

    动态绑定(运行时绑定)

public class BMW extends Car{

public static void main(String[] args) {
Car b = new BMW(); //继承 向上转型
b.bye();//方法重写
}
void bye() {
System.out.println("bye BMW");
}
}
class Car {
void bye() {
System.out.print("bye Car");
}
}

继承

    父类的私有属性和方法不会被继承

    子类不能重写父类的静态方法

类初始化

    从最顶的父类顺序初始化静态static变量,接着初始化当前类的静态static变量,static变量的初始化是伴随着类被装载时而初始化的,它的初始化在任何构造函数执行前

抽象类

    有抽象方法一定是抽象类,抽象类不一定有抽象方法

    抽象方法无具体实现

    扩展抽象类,一是在中定义部分抽象方法,那子类也是抽象类,二是定义全部抽象方法,那子类可以不定义成抽象类

接口

    一个接口可以被多个类实现,一个类也可以实现多个接口,接口只能有抽象方法和静态常量

    接口中所有的定义的字段默认都是public static final 的属性,写和不写没有区别。

    接口中的方法都是抽象的方法,并且抽象的方法默认都是public abstract修饰的,不能用其他的修饰符修饰,可以不写。

    接口中没有构造方法

    接口不是类,尤其不能使用new运算符实例化一个接口。但是可以声明接口的变量,这个变量可以指向实现了此接口的子类。

接口与抽象类的区别:

不同点:

1、接口可以多实现,而抽象类只能单继承

2、抽象类可以有非抽象的方法和构造方法、变量,但是接口只能有抽象方法,静态常量。

3、抽象类和子类具有父子关系,子类能拥有父类中一些属性。接口虽然某个类实现一个接口,但是由于接口中的变量都为静态常量,不存在继承关系。

相同点:

1、无论接口还是抽象类,都无法直接实例化,其自身实例化需要靠实现类或子类来实现。

2、接口和抽象类都必须实现其中的所有方法

super

    引用父类的构造方法,super必须在构造方法第一行

    引用父类成员变量和方法

this

    引用同类的构造方法,this必须在构造方法第一行

    引用同类成员变量和方法

访问权限修饰符

修饰符 同一个类 同一个包 不同包的子类 不同包的非子类
Private × × ×
Default × ×
Protected ×
Public


abstract

    抽象类不能被实例化

    抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象方法

    如果子类没有实现父类中所有的抽象方法,子类也必须定义为抽象类

    抽象类不能被定义为 private、final、和 static 类型

    没有抽象的构造方法

    抽象方法没有方法体,如果一个方法没有方法体,那么该方法必须声明为抽象的方法

    非抽象类继承抽象类的时候,必须要把抽象类中的所有抽象方法实现

static 

    如果声明了静态方法或变量,值是放在方法区,因为方法区是一个数据共享区;所以不管什么变量访问它,都是同一份

    在静态方法中不能直接访问实例方法和实例变量

    在静态方法中不能使用 this 和 super 关键字

    静态方法不能被 abstract 修饰.

    静态的成员变量可以使用类名或者是对象进行访问,非静态成员变量只能使用对象进行访问.

    静态函数可以直接访问静态的成员,但是不能够直接访问非静态成员.,非静态函数可以访问静态和非静态成员.

    当类被加载时,静态代码块只能被执行一次。类中不同的静态方法代码块按他们在类中出现的顺序被依次执行.

    当多个修饰符连用时,修饰符的顺序可以颠倒,不过作为普遍遵守的编码规范,通常把访问控制修饰符放在首位,其次是 static 或 abstact 修饰符,接着就是其他的修饰符

final

    final 变量必须被显式初始化,并且只能被赋值一次值 

    final 修饰基本类型变量的时候, 该变量不能重新赋值 

    final 修饰引用类型变量的时候, 该变量不能重新指向其他对象

    final 修饰的方法为最终的方法, 该方法不能被重写 

    private 类型的方法都默认为是final方法,因而也不能被子类重写 

    final 修饰的类为最终的类, 不能被继承

猜你喜欢

转载自blog.csdn.net/weixin_42129080/article/details/80443285