java 继承与抽象

第一章 继承

1、继承的含义
1. 面向对象的三大特性
	A. 封装性
	B. 继承性
	C. 多态性
	
2. 继承用于解决什么问题?
    "共性抽取" 
    
3. 继承关系的专业词汇
	A. 父类(基类、超类)
	B. 子类(派生类)
	
//通过动物类派生出狗类。 --> 父类是动物类,子类是狗类。狗类继承动物类
2、继承的格式
//父类
class FuLei{
    
}

//子类 extends 继承
class ZiLei extends FuLei{
    
}
3、继承当中的成员特点
1. 成员变量(考虑的是重名情况)
	A.直接访问: 
		对象名称.变量名称; //创建对象的时候,等号左边是谁,就优先使用谁!没有则向上找.
	B.间接访问: 
		对象名称.方法名称(参数); 在方法当中有访问成员变量的情况 //看当前调用的方法属于谁,就优先使用谁。
	C.三种变量重名问题:
		a.局部变量        //直接写变量名称,就可以使用
		b.本类成员变量	//采用 this.变量名称 就可以使用(this是用来区分成员变量和局部变量)
		c.父类成员变量	//采用 super.变量名称 访问父类的成员变量
            
2. 成员方法(考虑的是重名的情况) 重名的情况下就是方法的'覆盖重写'
	A. 规则:
		看等号右边 new 的谁是,就优先使用谁,没有则向上找。
	B. 概念:
		继承关系,相同方法。方法的覆盖重写。(重写的同名词。'方法的覆盖','方法的复写','方法的重写')
		混淆的两个概念:
		a.方法的重写: 继承关系,相同方法。			//区分: 两个类(记忆:方法的覆盖重写)
		b.方法的重载: 同一个类,名称相同,参数不同。  //区分: 一个类
    C.覆盖重写的注意事项"一大一小"
        a. "一大"   子类权限修饰符 >= 父类权限修饰符 
        b. "一小"   子类返回值类型 <= 父类返回值类型
        c. 注解,可以校验是否正确的覆盖重写  @Override 
  	 	//修饰符大小顺序 public> protected > (default) > private
  	D.方法覆盖重写的应用场景(什么时候需要使用方法覆盖重写)
  		"当父类方法不能完全满足子类现有需求的时候,就需要使用方法的覆盖重写" //父亲不能满足儿子
  		
3. 构造方法
	A. 规则:
		在创建子类对象的时候,先执行父类构造,再执行子类构造!(顺序问题)
	B. 原因:
		在子类当中,可能会使用到父类的成员变量。(父类的成员变量,需要使用父类的构造方法初始化!)

简单拓展一个注解: 防止处女座的同学!(追求完美主义者) 8.23-9.22

@SuppressWarnings("all")  //压制类当中所有的警告信息,波浪线。这句话写在类名称上方
4、super关键字和this关键字
1. super 关键字的用法: "super内存图含义:在堆内存当中的 本类里面的父类内容"
	A. 成员变量  super.变量名称;   //访问父类成员变量
	B. 成员方法  super.方法名称(参数);  //访问父类成员方法
	C. 构造方法  super(参数);  //访问父类构造方法。(必须写在构造方法的第一行)
	
2. this 关键字的用法: "this内存图含义:在堆内存当中的 本类内容"
	A. 成员变量 this.变量名称;   //访问本类成员变量,如果没有,则向上找父类
	B. 成员方法 this.方法名称(参数);  //访问本类成员方法,如果没有,则向上找父类
	C. 构造方法 this(参数);  //访问本类构造方法。(必须写在构造方法的第一行)
5、Java语言继承的特点
"单一继承,多级继承"
    
1. "单一继承" : 一个类,只能有一个亲生父亲。(只能有一个亲爹)
2. "多级继承" : 一个类,亲爹是唯一。但是还有爷爷,祖爷爷,太爷爷。

第二章 抽象

1、抽象的含义
有些情况下,对于父类而言,它不知道具体方法体的实现,但是必须要有这个方法,这里就是"抽象方法"
//例如: 动物类,必须有"吃的功能"方法,但是并不清楚具体吃什么,只是知道有.这里的吃就是 抽象方法
抽象方法无法明确知道具体的方法体实现,大括号当中,不清楚写什么。
抽象方法所在的类,必须是抽象类!

抽象的关键字 abstract
2、抽象类和抽象方法的定义
//动物类。抽象类(抽象类当中,既可以有抽象方法,也可以有普通方法)
public abstract class Animal{
    //抽象方法。没有方法体大括号的
    public abstract void eat();
    //普通的成员方法
    public void say(){
        System.out.println("动物叫");
    }
}
3、抽象类和抽象方法的使用

方式1: 继承抽象类。把自己变成抽象的

//写一个类,继承抽象类,不做任何实现,直接把自己变成抽象类
public abstract class Cat extends Aniaml{
    
}

方式2: 继承抽象类。覆盖重写父类的抽象方法

//写一个类,继承抽象类,覆盖重写所有的抽象方法
public class Dog extends Animal{
    @Override
    public void eat(){
        System.out.println("狗吃SHI");
    }
}
4、注意事项
1. 抽象类不能创建对象,但是有构造方法。
	抽象类当中构造方法作用:在调用儿子构造方法的时候,默认先调用父类构造,这个过程当中,给父亲的成员变量赋值
    
2. 抽象方法和抽象类关系
	A. 抽象方法所在的类 必须是 抽象类
	B. 抽象类当中 不一定有 抽象方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值