继承 :面向对象的精华,继承可在现有类基础上进行功能扩充,此种方式可快速开发出新的类,不需要写相同的程序代码,也是代码再利用的概念
格式:
calss 父类{}
class 子类 extends 父类{}
继承注意事项:
1.子类可 继承父类非封装的属性和方法 ;封装的属性-子类可用setter和getter方法或者构造方法
2.子类也可以 定义自己的属性和方法
3.子类只 允许多层继承 ,不能同时继承多个父类
多重继承:
class A{}
class B{}
class C extends A{},B{}(错误)
多层继承:
class A{}
class B extends A{}
class C extends B{}(正确)
子类实例化过程:
1)子类对象在实例化之前, 先调用父类的构造方法 (对父类的属性进行初始化)
2) 再调用自己的构造方法
3)余下的父类和子类的普通方法,由子类实例对象决定调用哪个
1)子类 定义了与父类中同名的方法
2)子类 覆写的方法不能拥有比父类方法更加严格的访问权限 。 (访问权限:private<default<public)
总结:当方法被覆写之后,子类对象调用的方法是覆写后的方法
父类方法若是private权限,则子类不能覆写
2)子类对父类属性的覆写(父类属性私有)
子类和父类声明了相同名称的属性,则在子类中直接访问时一定采用“就近访问原则”
方法重载和覆写的区别
方法重载和覆写的区别 | ||
重载 | 覆写 | |
单词 | @Overload | @Override |
定义 | 类中方法名称相同,参数类型或者个数不同,对权限没要求 | 子类和父类方法名称,参数类型,返回值类型全部相同,被覆写的方法不能拥有更严格的权限 |
范围 | 发生在一个类中 | 发生在继承类中 |
super关键字可从子类中调用父类的构造方法,普通方法,属性
注:1)只能调用非封装的
关键字super和this的区别
关键字this和super区别 | ||
this | super | |
属性访问 | 访问本类中的属性,本类中没有此属性,则从父类中查找 | 访问父类中的属性 |
方法 | 访问本类中的方法,本类中没有此方法,则从父类中查找 | 直接访问父类的方法 |
构造方法 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法首行 |
注:调用构造方法时,两者不能同时出现 |
final关键字
java中final表示意思是最终(完结器),使用final关键字声明类,属性,方法时,要注意:
1)使用final声明的类不能有子类(即不能被继承)
2)使用final声明的方法不能被子类覆写
3)使用final声明的变量即为常量,常量不能修改
抽象类
定义:包含一个抽象方法的类必须是抽象类,关键词abstract
1)抽象方法只需声明而不需要实现(声明不能用private,否则子类不能实现)
2)抽象类也可以有普通方法
3)抽象类也可有抽象类的构造方法
4)抽象类必须被子类继承,子类必须重写抽象类中的全部抽象方法
5)抽象类不能被直接实例化
6)抽象类专门当做父类,作用类似“模板”==>模板设计模式
接口
接口是java中一种特殊类,是由全局常量和公共的抽象方法所组成
格式:
interface 接口名称{
全局常量;
抽象方法;
}
注:接口中抽象方法必须定义为public访问权限
子类实现接口:
class 子类 implements 接口A,接口B{
}
总结:
1)接口可1次继承多个接口(类1次只能继承一个父类)
2)一个子类可以同时实现多个接口,且覆写接口内的全部抽象方法,这样可以摆脱java单继承的局限
子类继承普通类/抽象类实现接口
子类可同时继承抽象类并实现接口
格式:
class 子类 extends 抽象类 implements 接口A,接口B{
![](https://i-blog.csdnimg.cn/blog_migrate/00f2498fa07fccfb24ee9a4d37c0a7d9.png)
抽象类实现接口
***抽象类可实现接口,但接口不允许继承抽象类(抽象类还包含其他的属性和普通方法,但接口只有抽象方法),允许一个接口继承多个接口
abstract 子类 implements 接口A,接口B
格式:
interface 子接口 extends 父接口A,父接口B{
}
抽象类实现接口
抽象类和接口的区别
接口和抽象类的区别 | ||
抽象类 | 接口 | |
定义 | 包含一个抽象方法的类 | 抽象方法和全局变量的集合 |
组成 | 构造方法,抽象方法,普通方法,常量,变量 | 抽象方法,常量 |
使用 | 子类继承抽象类(extends) | 子类实现接口(implements) |
关系 | 抽象类可以实现多个接口 | 接口不能继承抽象类,但允许继承多个接口 |
局限 | 抽象类有单继承的局限 | 接口没有此局限 |
选择 | 如果抽象类和接口都可以使用,优先使用接口,避免单继承局限 | |
设计模式 | 模板设计 | 工厂设计 |
实际 | 作为一个模板 | 作为一个标准或表示一种能力 |
进阶 | ||
对象 | 都通过对象的多态性产生实例化对象(共同点) | |
特殊 | 一个抽象类中可包含多个接口,一个接口可以包含多个抽象类 |