java 面向对象 继承 多态

static

静态,修饰符,可以修饰成员方法,成员变量  随着类的加载而加载

  • 修饰成员变量  静态变量
    • 特点:被该类所有对象共享 
      • 不属于对象,属于类  
      • 随着类的加载而加载,优先于对象存在
    • 调用方式:类名调用(!!)       对象名调用
  • 修饰成员方法  静态方法
    • 特点:多用在测试类和工具类中  javabean很少用
    • 调用方式:类名调用(!!)       对象名调用

 三种类

  • javabean类     用来描述一类事物的类
  • 测试类   用来检查其他类是否正确,带有main方法的类,程序的入口
  • 工具类    帮助做一些事情的类   不描述任何事物
    • 类名见名知意
    • 私有化构造方法     不让外界创建它的对象
    • 方法都定义为静态

 static注意事项总结

  • 静态方法中,只能访问静态变量和静态方法
  • 非静态方法可以访问所有
  • 静态方法中没有this关键字

继承

  •  extends 关键字   
public class Student extents Person {}
  • Student 成为子类,person成为父类
  • 继承可以把多个子类中重复的代码抽取到父类中,提高代码复用性
  • 子类可以在父类的基础上,增加其他功能,使子类更强大

自己设计 继承

  • 什么时候用继承

    • 当类与类之间,存在相同的内容,并满足子类是父类中的一种,使用继承
  • 继承的特点

    • java只支持单继承,不支持多继承,但支持多层继承
      • 多层继承:子类A继承父类B,父类B继承父类C     C是A的间接父类 B是A的直接父类
    • 每个类都直接或间接继承于  Object      (不写继承时默认继承Object )
    • 子类只能访问父类中非私有的成员

 画图法 

 画图从子类往父类画 抽取共性       写代码 从父类往子类写

  • 子类能继承父类的哪些内容

    • 构造方法     无论私有还是非私有,子类都不能继承  (构造方法名字要与类名一致)
    • 成员变量     私有和非私有子类都可以继承下来,但私有的子类不能调用 
      •  调用父类私有成员变量 需要用get/set方法
    • 成员方法      虚方法表里的方法可以继承,其他的不可以继承 
      • ​​​​​​​虚方法表, private、static、final 修饰的方法    Object 虚方法表 5个方法   子类继承父类的虚方法表,然后符合要求的方法加载到虚方法表中
  •  继承学习点

    • 成员变量/方法的访问特点
      • 就近原则   局部->本类成员(this)->父类成员super)  逐级往上找
    • 方法的重写    子类覆盖从父类继承的虚方法表里的方法
      • 当父类的方法不能满足子类现在的需求时,需要进行方法重写   可以调用父类
      • 在继承体系中,子类出现和父类一样的方法声明,称子类的方法是重写的方法
      • 重写方法时,方法上面加  @Override  注解
      • 重写的方法尽量与父类保持一致, 名称、形参列表必须一致
      • 只有被添加到虚方法表里的方法才能被重写
    •  构造方法访问特点
      • 子类不能继承父类的构造方法,但可以通过 super 调用
      • 子类构造方法第一行,有一个默认的· super()
      • 默认先通过super() 访问父类中的无参构造,再执行自己的
      • 如果想访问父类的有参构造,需要手动书写 super(参数)
  • this  super 
    • this  看做局部变量  当前方法调用者的地址值
      • this()    访问本类其他构造方法   给数据赋默认值时使用
    • super  父类存储空间 

多态

基础概念

同类型的对象,表现出的不同形态

多态的表现形式:

父类类型  对象名 = 子类对象;

多态的前提

  • 有继承关系     
  • 有父类引用指向子类对象      Fu f = new Zi()
  • 有方法重写

 多态调用成员的特点

创建对象      Fu f = new Zi();

  • 变量调用   编译看左边(父类对象) 运行也看左边
  • 方法调用    编译看左边   运行看右边(子类对象)

多态优点

方法中,使用父类类型作为参数,可以接收所有子类对象

多态弊端

不能使用子类的特有功能

引用数据类型转换

  • 自动类型转换   Fu f = new Zi();
  • 强制类型转换    Zi  z = (Zi)  f ;

强制类型转换后解决的问题

  • 可以转成真正的子类类型,从而调用子类独有功能
  • 转换类型与真实对象类型不一致会报错
  • instanceof 判断类型后再进行强转
if(f instanceof Zi z){
    z.method();
}    
//判断 f 是不是 Zi类型的 是的话 强转成Zi类,转换后变量名为 z 
//不是的话,不强转,结果为 false

包,final,权限修饰符,代码块

  • 使用同一个包中的类,不需要导包
  • 使用java.lang包中的类,不需要导包
  • 其他情况都需要导包
  • 如果同时使用两个包中的同名类,需要用全类名
    • 全类名,com.it.domain.类名

final

  • 方法    最终方法,不能被重写
  • 类        最终类,不能被继承
  • 变量     常量,只能被赋值一次
    • 实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性
    • 常量  单个单词  全部大写    多个单词   全部大写 单词之间用下划线_隔开
    • final 修饰基本类型  数据值不能改变
    • final 修饰引用类型, 变量存储的地址值不能改变,内部属性值可变
改写学生系统代码

 权限修饰符

  • private   私有 只能本类中用 
  • 默认 空着不写    只能本包中用
  • protected  本包和其他包中的子类可用
  • public  所有都能用

代码块

  • 局部代码块  出了代码块就释放内存
  • 构造代码块   
    • 写在成员位置的代码块。可以把多个构造方法中重复的代码抽取出来
    • 在创建本类对象时会先执行构造代码块再执行构造方法
  • 静态代码块    static{}
    • 随着类的加载而加载,只执行一次
    • 应用场景   数据初始化

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值