面向对象(二)static 关键字、封装、继承、子类对象实例过程 、super关键字

(一)static 关键字

           静态的

作用: 

1.修饰属性, 静态属性,类属性:

        使用场景: 某个类的所有对象共享某个数据, 使用静态属性

        语法:  static 数据类型 属性名;

        此时静态属性作为该类所有的对象共享的

调用静态属性:

        1) 使用对象名.静态属性名

        2) 使用类名.静态属性名 (推荐)

2.修饰方法: 静态方法: 使用场景: 工具类

        非静态方法的调用, 在其他类,main方法内调用: 先创建方法所在类对象,然后通过对象名.方法名() 来调用

        静态方法的调用: 在其他类,main方法内调用, 直接使用类名.静态方法名()

静态方法优点: 调用简单

静态方法的缺点:

        1.无法使用非静态资源(实例属性,非静态方法, this,super),只能使用静态资源, 非静态方法调用非静态资源,也调用静态资源

        2.static修饰的, 不会被gc回收, 等到程序结束之后才回收

3.静态代码块: 使用场景: 做初始化操作, 做准备工作

语法:

static{
  //代码块
}

        静态代码块是在所在类的被加载到内存的时候, 就会自动执行该类所有的静态代码块.

只执行一次

 一个类可以写多个静态代码块, 执行顺序,从上往下

4.修饰内部类, 静态内部类 (了解)

内部类

Public class Demo5{

Int a;

Int b;

  Class InnerClass{

//不能调用a,b,除非加final

}

Static class InnerClass{

//不能调用a,b,除非加static

}

(二)封装

        封闭隐藏, 隐藏细节, 保护安全

        包装,组装: 整体的眼光看待问题

作用:

        提高易用性(使用简单), 编写一个类, 内部很复杂, 这些复杂的代码,封装起来, 暴露的几个方法,

        提高安全性: 对有些属性,有些方法, 屏蔽掉, 禁止用户访问,从而提高类安全

把重复的代码,抽取出来,使用方法,或者类来封装, 从而达到代码的重用

java的封装的实现:

步骤:

把属性的访问修饰符设置为 private(修饰的资源只能在本类访问)

给属性提供公开的get/set方法:

get方法: 读操作 set方法: 写操作

private int age;
//get方法  读
public int getAge(){
return age;
}
//set方法 写
public  void setAge(int age){
this.age = age;
}


idea提供生成set/get方法: alt + insert

(三)继承

        子类继承父类, 子类继承父类的属性和方法, 构造方法不能继承, 但是如果父类这个属性使用private 修饰, 子类继承这个属性,但是是无法访问,

作用:

        实现代码的重用, 基于类层次的代码重用

        把多个子类中公共的代码,抽取出来, 放到父类中, 子类继承父类, 这个公共代码,被子类继承,从而实现代码的重用

继承使用步骤:

1.把子类公共的代码抽取出来, 形成一个父类

2.让子类继承父类: 使用的关键字: extends

public class 子类 extends 父类{

}

案例: 宠物系统

小狗, 小猫

属性: 名字, 健康值, 亲密度

小狗特有属性: 类型

小猫特有属性: 颜色

领养宠物:

1.继承细节:

java的继承是单继承, 一个子类只能有一个直接父类

在 java 中只允许单继承,而不允许多重继承,也就是说一个子类只能有一 个父类,但是 java 中却允许多层继承.

多重继承:

多层继承:由上面可以发现类 B 继承了类 A,而类 C 又继承了类 B,也就是说 类 B 是类 A 的子类,而类 C 则是类 A 的孙子类。我们java的所有类都有一个祖先类,就是我们的Object类.

(四)子类对象实例过程

java所有的类都有一个祖先类: java.lang.Object, 如果一个类没有显示写继承继承那个类,默认继承java.lang.Object

1.初始化父类的属性

2.执行父类的构造方法

3.初始化子类的属性

4.执行子类的构造方法

(五)super 关键字

super 表示父类的对象, this表示本类对象

super.属性: 调用父类的属性, 无法使用, 属性进行私有化

super.方法: 调用父类的方法

super([参数]): 调用父类的构造方法,

super(): 注意事项:

只能写在子类构造方法内

只能在子类构造方法的第一行代码

不能与this() 同时存在

如果子类构造方法没有写super(), jvm会自动添加super(), 手动编写super()调用父类构造方法, jvm不会添加super()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值