Java学习之路-day20

1、静态代码块

static{
}

静态代码块,当第一次用到本类时,静态代码块执行唯一的一次;静态内容总是优先于非静态的(先有类在有对象),所以静态代码块比构造方法先执行;
静态代码块的典型用途:用来一次性的对静态成员进行赋值;
2、静态是不能直接访问非静态的,如果想访问必须要先创建对象,让对象去调用非静态;静态变量不可设置全参构造和get/set方法————》因为静态的是共享的数据;
3、在继承关系中,子类就是一个父类,子类可以当做父类看待;
4、父类将共有的内容赋值一份给每一个子类,父类的内容,是所有子类共有的内容;

public class Fu(){
	public void method_01(){}
	public void method_02(){}
}
public class Zi extends Fu(){
}
public class Demo01{
	public static void main(String[]args){
	Zi zi = new Zi();
	//新创建一个子类,将继承父类当中所有的内容,因为父类的内容是共有数据,但是如果某个子类不具备父类的某个方法内容,该子类也同样会被继承,这样会造成不安全和不合理;
	zi.method_01();
	zi.method_02();
	}
}

子类的特殊属性或行为,不能写在对应的父类中,因为父类的数据内容是所有子类共享的;
5、什么条件下使用继承?
【a】前提是必须在同一个类的事物,将一类事物中相同的属性和行为抽取出来,形成一个类,作为同一类的父类,这样做可以提高代码的复用性;
6、父类不能访问子类的内容,因为父类不能确认子类当中有什么内容;
当访问变量的时候,遵循就近原则,局部变量-》本类成员变量-》向上查找父类的成员变量
7、在父子继承关系中,进行覆盖重写,
【a】子类方法的返回值必须小于等于父类方法的返回值范围
【b】子类方法的访问权限必须大于等于父类的权限修饰符
8、什么时候去重写父类的方法?
【a】如果父类的方法已经不满足子类的使用
【b】提高子类方法的功能性,子类的功能将比父类更强大;
9、当一个类,即继承了一个父类,又实现了若干个接口时,父类中的成员方法和接口中的默认方法重名,子类就近原则选择执行父类的成员方法;
【注意】
【a】子接口重写默认方法时,default关键字可以保留;
【b】子类重写默认方法时,default关键字不可以保留;
10、继承中:**只有子类构造方法,才能调用父类构造方法;**同时子类构造方法必须调用父类的构造方法,不写赠送,同时必须位于子类构造方法的第一个语句;
【注意父子类执行的顺序】先执行父类的构造方法,对父类的成员进行初始化动作,在对子类进行初始化,才构建子类对象;无论如何创建子类对象的时候,都要先保证父类被初始化;
super();就是用来访问父类的构造方法,来初始化父类中成员;

public Zi(){
super();//必须位于子类构造方法第一个语句
}
public void method(){
super();//错误写法,只有子类构造方法才能调用父类的构造方法
}

11、构造方法的作用:
【a】初始化成员变量
【b】构建对象
构建对象:new 在堆中开辟一个内存空间,通过构造方法创建对象;
12、执行和调用?Zi zi = new Zi();调用子类对象,但是先执行父类的构造方法,来初始化父类的成员,初始化完成后,才能使用,之后在进行子类的构造方法进行子类的初始化动作;
13、
【a】this和super访问的都是成员,this访问的是本类成员,super访问父类成员;
【a】this不加小括号,代表的是本来的对象,this(),代表的本类的构造方法;

public Zi(){
super();
Zi(n);//错误写法,如果成立,父类将会初始化两次,当在调用子类无参构造方法时构建子类对象时,系统会默认赠送suepr()用来初始化父类成员,每调用一次,就会重新初始化一次,这样在无参的子类构造方法中去执行有参的子类构造方法时,是不允许的,会报错;只能通过this()关键字,进行调用,同时super 和this,因为都要位于构造方法的第一行语句,两个关键字不能同时存在,这样在调用有参构造方法时,就父类只会初始化执行一次;
}
pubic Zi(int n){
 super();
}

当子类new对象时,每个子类在堆中的内存空间都有一个父类空间,同时每new一次,就是调用了一次子类的构造方法,这样就会重新初始化一次父类成员,super();即使对同一变量进行赋值动作,也不会相互影响;
父类进行初始化后,子类new对象时,父类会将成员变量和成员方法,复制一份给子类对象到堆内存中,这样子类对象就可以直接使用父类里面的成员(成员变量和成员方法)了;每new一次父类就会复制一份成员给子类,同时不会被覆盖;
14、抽象方法,就是abstract关键字,去掉大括号,没有方法体,只是定义了一个方法,没有具体的实现;
【注意】
【1】【抽象类不能直接创建对象】,抽象类必须作为一个父类,通过子类继承进行实现,同时子类必须覆盖重写抽象类中的所有抽象方法,否则子类也必须是一个抽象类;
抽象类如果可以创建对象,那么抽象类对象就可以直接访问抽象类中的抽象方法了,但是抽象方法时没有方法体,没有具体实现的,抽象类对象访是没有意义的;
【2】抽象类可以有成员变量和成员方法,和构造方法;
【a】抽象类中构造方法,是用来初始化成员变量的,因为在抽象类中有成员变量,new对象,就要对抽象类中的成员进行初始化,所以抽象类中可以有构造方法;但是接口中没有构造方法的,只有抽象方法,因为接口中没有成员变量存在;
【3】抽象类的作用:主要是对子类定义规则,必须要遵循的;其实抽象方法就是一种规则;子类必须覆盖重写所有的抽象方法;
15、每new一次对象,子类内存空间都有一份父类的成员空间;
抽象类中的构造方法是用来初始化成员变量的,因为在抽象类中有成员变量
,但是抽象类中的构造方法是不能被实例化的,因为抽象类中可以有抽象方
法,而抽想方法是没有方法体的方法,不能直接调用,必须要让子类实现才
能够使用;
多态:
Fu f = new Zi();
f.method();
当使用多态调用方法时,首先检查父类中是否有该方法,如果没有,则编译
错误,如果有,执行的是子类重写后方法;
调用成员方法的时候,编译看等号左边,运行看等号右边,new谁就调用谁;
后期的学习内容,希望明天可以得到,同时踏实学习,将不会的,不清楚,都要搞明白,举一反三,共勉,以马内利

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值