【继承 - 拓展性】

【static 静态的】

 1. 修饰属性 -> 静态属性 (属于类的,区分于成员属于成员(对象)的)

 

 2. 修饰方法 -> 静态方法 (属于类的,可以用类名直接调用)

静态方法中不允许出现非静态的成员属性和方法

静态方法中不允许出现this

 

 3. 静态代码块

只在加载这个类的时候执行一次

 

 4. 静态内部类

修饰为static的内部类,没有内部类对象和外部类对象之间的联系

  就是说可以直接使用Outer.Inner这个类

  甚至可以不需要创建内部类对象

  普通的内部类不能有static方法和属性,也不能包含静态类;但是静态类可以有

  静态类可以直接使用外部类的静态属性和方法

  静态类不能使用外部类的非静态属性和方法

  静态类一般会声明为public,方便调用

 

 5. 静态导入(不说)

 

6.静态变量在内存中的存放位置

【代码块】

 {} - 代码块的格式

 1. 局部代码块

定义在方法内的代码块

作用:隔离局部变量的作用域

 

 2. 构造代码块

直接定义在类中的代码块

作用:在构造器之前执行

 

 3. 静态代码块

用static修饰的代码块

作用:只在加载这个类的时候执行一次

 

【初始化顺序】

 任何一个对象的初始化主要经历2步

 1. 加载类

属于类的东西,在这个时间会完成初始化

静态属性,静态代码块的初始化顺序就是它们的定义顺序

 

 2. 初始化对象

初始化属于对象的东西

成员属性,构造块,构造器

 

先初始化成员属性和构造块,初始化顺序就是它们的定义顺序

最后执行构造器。

 

【继承 - 拓展性】

概念

把多个类中相同的成员抽取出来放在一个类中,再使用extends关键字使他们产生联系

 

好处

  1) 提高了代码的可重用性

  2) 在升级代码时,不用重复书写以前的代码

 

坏处

  1) 增加了类和类之间的耦合

 

 程序的设计思路:低耦合,高内聚

 耦合:类和类之间的关系

 内聚:自己独立解决问题的能力

 

 老师出了一道很难的题,但是你们一定要做出来,怎么办呢?

 1. 自己努力做,查资料,直到把它做出来为止

 2. 发现同桌好像会,直接问他,或者抄一遍

 

 

java中继承的特点

  1)单线继承

  2)子类可以通过继承得到父类中所有非私有成员,注意构造器无法通过继承获取

  3)在构造子类对象时,会先构造父类对象

 

 

在使用继承时要注意的地方

  1)不要为了部分功能区强行继承

class A{

    void a();

    void b();

}

class B extends A{

    //void b();

    void c();

}

  2)继承必须体现一种特殊与一般的关系 is-a

class Worker extends Person

//体现了  Worker is a Person

  

class Pig{

    void eat();

}


class Student extends Pig{



}

  3) 构造子类对象时,会默认调用父类的无参构造

 

 

 

* 方法重写、方法覆盖、Override(重点)

  在子类中写一个和父类同名同参数列表的方法,然后修改方法的实现过程

 

  代码规范:重写的方法必须加上@Override 注解

 

  ** 方法重载:在同一个类中可以有多个同名不同参数的方法

 

 

 成员属性的寻找顺序:

 本类中寻找 -> 父类中寻找 -> 父类的父类 -> ...

 

 使用父类中的成员属性或方法,通过super.

 

面试题:解释重载与覆写的区别(解释overloading与overrid的区别)

 

NO

区别

重载

覆写

1

英文单词

Overloading

Override

2

发生范围

发生在一个类里面

发生在继承关系中

3

定义

方法名相同,参数类型个数不同

方法名相同,参数类型,个数相同,方法的返回值相同

4

权限

没有权限的限制

被覆写的方法不能拥有比父类更为严格的访问控制权限

 

在使用overloading的时候返回值能否不同?

在发生重载关系的时候,返回值可以不同,但是考虑到程序设计的统一性,重载时尽量保证方法的返回值类型相同。

 

** 继承中的初始化顺序

 1. 加载类的顺序

 

   先加载父类,再加载子类

   加载静态代码块和静态属性,加载顺序是它们的定义顺序

 

 2. 初始化对象

对象的构造顺序

   先构造父类对象,再构造子类对象

   初始化成员属性和构造块,初始化顺序是它们的定义顺序,最后执行构造器

 

class A{

}

class B extends A{

}

class C extends B{

}

 

加载类时,先A的静态块和静态属性,再B的静态块和静态属性,再C的静态块和静态属性

初始化对象时,先A的成员属性和构造块,再A的构造器;然后是B的成员属性和构造块,再B的构造器;

最后C的成员属性和构造块,然后C的构造器

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值