Java学习之路-day11

今天学习继承知识,总结如下:
1、定义子类和父类的格式
public class 父类名称{
…定义父类
}
public class 子类名称 extends 父类名称{
…定义子类
}
2、父类对象只能使用父类的方法,不能使用子类的方法,但是子类可以访问父类当中的方法,同时也可有自己专有的方法进行调用
3、在父子类的继承关系当中,如果【成员变量重名】,则创建子类对象时,访问有两种方式:
直接通过【子类对象】访问成员变量:等号左边是谁,就优先用谁,没有则向上找;
间接通过【成员方法】访问成员变量:
int num = 10;//父类成员变量
int num = 10;//子类成员变量
System.out.println(child.num);//优先访问子类的成员变量
如果调用不存在的变量,那么编译会报错
System.out.println(child.adc);
【间接通过成员方法】:
该方法属于谁,就优先用谁;//【属于谁,就是定义在哪,就优先使用】
//这个方法是子类的,优先使用子类的,没有在向上找
zi.methodZi();
//这个方法是在父类当中定义的,优先使用父类
zi.methodFu();
4、【父类当中的成员变量num;子类当中的成员变量num和子类成员方法中局部变量num三个变量重名】
局部变量:【直接写成员变量名】
本类的成员变量:【this.成员变量名】
父类的成员变量:【super.成员变量名】
父类:
public class Fu{
int num = 10;//父类成员变量和子类成员变量及子类成员方法中局部变量重名
}
子类:
public class Zi extends Fu{
int num = 20;
public void method(){
int num = 30;
System.out.println(num);//30,局部变量
System.out.println(this.num);//20,本类的成员变量
System.out.println(super.num);//10,父类的成员变量
}
}
【注意】继承中成员方法的访问特点:
在父类的继承关系当中,创建子类对象,访问成员方法的规则:
public void method(){};父类成员方法
public void method(){};子类成员方法//子类和父类的成员方法重名
zi.method();
//创建的是子类对象,所以优先用子类的方法;
//创建对象是谁,就优先用谁,如果没有则向上找;
【注意事项】无论是成员方法还是成员变量,如果没有都是向上找父类的,
绝对不会向下找子类的;【都是向上找父类的】
5、重写 Override–》重载Overload --》都是重点
方法的重写:在继承关系当中,【方法的名称一样,参数列表也一样;】
【重写和重载的区别】
重写:方法的名称一样,参数列表也一样;【也叫做方法的覆盖重写】
重载:方法的名称一样,参数列表不一样;
【覆盖重写】方法的覆盖重写特点:创建的是子类对象,则优先用子类的方法;
new的谁,用的就是谁
方法覆盖重写的注意事项:
【注意】
【a】必须保证父子类之间方法的名称相同,参数列表也相同;
public class Fu{
public void method(){
}【1】子类和父类构成了方法的覆盖重写
}
public class Zi extends Fu{
public void method(){
}【1】子类和父类构成了方法的覆盖重写
public void method1(){
}【2】不是方法的覆盖重写,因为子类与父类的方法名称不一样
}
【@Override】:写在方法前面,用来检测是不是有效的正确覆盖重写,这个注释就算不写,只要满足要求,也是正确的覆盖重写,它是可选的但不是必须的;
【b】子类方法的返回值必须【小于等于】父类方法的返回值范围;
public class Fu{
public 【String/object】父类返回值 method(){
}
}
//java.lang.Object类是所有类的公共最高父类,java.lang.String就是Object的子类
public class Zi extends Fu{
public 【String】子类返回值 method(){
}
public void method1(){
}
}
【c】子类方法的权限必须【大于等于】父类方法的权限修饰符
//权限范围:
public > protected > (default) > private

【特别注意】【(default)不是关键字default,而是什么都不写,留空】
在通常情况下:子类和父类绝大多数的权限修饰符是相同的
6、设计原则:
对于已经投入使用的类,尽量不要进行修改,推荐定义一个新的类,来重复利用其中的共性内容,并且添加改动的内容;
想要改动之前的东西,尽量不要修改,在原来的基础上进行添加,继承之前的东西----》子类继承父类进行覆盖重写

public class Fu{
	public void call(){
	}
	public void sendMessage(){}
	public void show(){
		// 发短信
		//打电话
	}
}

public class Zi extends Fu{
	public void call(){
	}
	public void sendMessage(){}
	public void show(){
		// 发短信
		//打电话--》之前就有的功能,继承父类
		super.show();//直接调用,减少代码的重复
		//显示号码
		//显示头像---》新的功能  
	}
}
8、继承关系中,父子类构造方法的访问特点:
1、子类构造方法当中有一个默认隐含的super()调用,所以一定是先调用父类的构造,后执行的子类构造;先调用父类在调用子类
2、可以通过super关键字来子类构造调用父类的重载构造
3、super的父类构造调用,必须是子类构造方法的第一个语句,不能一个子类构造调用多次super构造;--》如果子类构造方法中有多条super语句,将会报错
4、只有子类构造方法,才能调用父类的构造方法
【总结】
子类必须调用父类的构造方法,不写则赠送一个super();写了则用写的指定的super调用,super只能有一个,还必须是第一条语句
public class Fu{
	public Fu(){
		//父类无参构造
	}
	public Fu(int num){
		//父类有参构造
	}
}``
今天学习状态不好,学习进度变慢了,明天一定要补回,共勉!
明天任务,把错题和模糊的知识点在复习一遍!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值