面向对象-继承与抽象类*
继承的概述
继承:多个类的有共同的成员变量和方法,抽取到另外一个类中(父类),在让多个类去继承这个父类,我们的多个类就可以获取父类中的成员了
extends
package con_01;
public class ExtendsDemo{
}
class Game{
String name;
double version;//版本号n
String agent;//代理商
}
class DotA extends Game{
/*String name;
*double version;//版本号n
*String agent;//代理商
*/
public void start(){
System.out.println("Game begin");
}
public void stop(){
System.out. println("Game stop");
}
}
class LOl{
/*String name;
*double version;//版本号n
*String agent;//代理商
*/
public void start(){
System.out.println("Game begin");
}
public void stop(){
System.out.println("Game stop");
}
}
继承的特点
Java语言只支持单一继承,只能继承一个父类(一个儿子只能由一个亲爹)
Java语言支持多层继承(一个儿子可以有一个亲爹,还可以有一个亲爷爷)
package con_1;
public class Extends{
public static void main(String[] args){
LOL l new = new LOL();
l.update();
}
}
class Game{
System.out.println("游戏启动了")
}
class PCGame extends Game{
public void update(){
System.out.println("PCGame更新了")
}
}
class MobileGame extends Game{
public void update(){
System.out.println("MobileGame更新了")
}
class LOL extends PCGame,MObileGame/*(只支持一个父类)*>{
}
继承中的成员变量的特点
继承中成员方法的特点
方法重写应用场景和注意事项
继承中的构造方法执行顺序
this和super的区别
继承的优缺点
优点:提高代码的复用性,提高了代码的可维护性
缺点:类的耦合性增强了
开发的原则:高内据低耦合
内聚:就是自己完成某件事情的能力
耦合:类鱼类的关系
抽象类的概述
abstract:关键字,用于修饰方法和类
抽象方法:不同类的方法是相似,但是具体内容不太一样,所以我们只能抽取他的声明,没有具体的方法,没有具体方法体的方法就是抽象方法
抽象类:有抽象方法的必须是抽象类
注意:一个类继承了抽象类需要重写 所有的抽象方法,否则这个类就是抽象类
package con_1;
public class AbstractDemo{
}
abstract class Animal{
public abstract void eat();
//非抽象方法可以不重写
public void run(){
}
}
class Cat extends Animal {
@Override
public void eat(){
System.out.println("猫吃鱼");
}
}
abstract Dog extends Animal{
}
抽象类的特点
特点:抽象方法只能在抽象类里面
抽象类的抽象方法必须被abstract修饰
抽象类不能创建对象(不能实列化)
可以有非抽象的方法
抽象类和类的关系也是继承
一个类继承了抽象类要么重写所有的抽象方法,要么他自己是抽象类
抽象类的成员特点
成员变量
可已有成员变量
可以有常量
成员方法
可以有抽象方法
可以有非抽象方法
构造方法
可以有构造方法的,需要对抽象类的成员变量初始化
final:修饰类(不能被继承),成员变量(常量),成员方法(不能重写)
抽象类案列(老师)
基础班老师 就业班老师
共性
属性 姓名,年龄,性别
行为 讲课,唱歌
package con_1;
public calss AbstractTest{
public static boid main(String[] args){
basicTencher basic = new basicTencher();
basic.teach();
}
}
abstract class teacher{
String name;
int age;
String gender;
public abstract void teach();
}
class basicTencher extends teacher{
@Override
public void basicTencher(){
System.out.println(name+"基础班课程");
}
}
class jobTencher extends teache{
@Override
public void basicTencher(){
System.out.println(name+"就业班课程");
}
}
抽象类的细节
不能与final,private使用
不能创建对象,有构造方法
可以有抽象方法也可以无抽象方法
抽象类不可实列话和private(不能创建对象)
抽象类的思想
API案列