Java面向对象oopDay3

面向对象特征:封装、多态、继承、抽象


一、访问修饰符 和 封装(private修饰下的set()和get()方法)

1.访问修饰符:public、protected、default、private
   public: 公开的、公共的
   protected: 受保护的
   default: 默认的
   private: 私有的

  1)访问修饰符可以修饰: 类、成员方法、成员变量
  2)访问范围(从大到小)
   public > protected > default > private
   public:所有类中可用
   protected:用于父子类关系中(可以不同包)
   default: 本包中(不管有无父子类关系)
   private: 本类中(出了本类,将不可使用)
  3)使用情况
   public:想要所有类所共享的内容
   protected:只想供子类使用的内容
   default: 不用,一般练习使用
   private: 最重要!! 最常用!! 基本所有实体类中的成员变量都会使用
2.面向对象特征之封装
a.使用private访问修饰符修饰成员变量
    private int a;
b.给外部提供一对可以访问该成员变量的方法
   get() - 获取成员变量
  public int getA(){
         return a;
     }
   set() - 设置成员变量
  public void setA(int a){
         this.a=a;
     }
c.封装的好处:
      通过方法的方式去访问成员变量,保证了代码的安全性.
      把代码用方法进行封装,提高了代码的复用性.

二、static关键词:静态的
1.作用: 使用static修饰后的都是属于该类所有对象共享的

2.修饰成员变量 - 静态变量(类变量)
   格式:
      访问修饰符 static 数据类型 变量名 = 初始化值
   使用:
      类名.变量名

   局部变量: 存在方法中
   成员变量: 存在类中
    实例变量:
      没有添加static关键词,
      属于对象的,
      使用方式: 对象名.变量名
      个数: 随着对象决定

    静态变量:
      添加static关键词,
      属于类,
      使用方式: 类名.变量名
      个数: 有且只有一个
3.修饰成员方法 - 静态方法(类方法)
   格式:
      访问修饰符 static 返回值类型 方法名(参数)
   使用:
      类名.方法名

   实例方法: 
      没有static修饰的方法
      属于对象的
      使用方式: 对象名.方法名
      个数: 随着对象决定

   静态方法:
      有static修饰的方法
      属于类的
      使用方式: 类名.方法名
      个数: 有且只有一个

   注意:
      a.在实例方法中可以直接使用静态的变量和方法
      b.在静态方法中,不可以直接使用实例的变量和方法,因为实例的变量和方法属于对象的,而静态修饰的都加载在对象之前.

4.修饰代码块 - 静态代码块
   实例代码块:没有static修饰,必须放在类中,跟对象初始化一起加载.
      特点:
         a.属于对象的
         b.每次调用构造方法进行初始化对象时,实例代码块都会自动触发一次,并且都执行在构造方法之前.

      作用:
         a.提取所有构造方法中重复的代码
         b.给成员变量初始化

   静态代码块:带有static修饰,必须放在类中,和类一起加载执行.
      特点:
         每次加载类(使用类)的时候都会先执行静态代码块一次.
            使用类的情况:
               a.新建对象(new)
               b.使用静态变量
               c.使用静态方法
         静态代码块是自动触发的,只要程序启动,静态代码块会随之执行.
         静态代码块可以放在类中任意位置,也可以有多个代码块,但是都是统一加载,并且只加载一次.

      作用:
         在启动程序之前可以做资源的初始化,一般用于初始化静态资源(图片,文件...)

5.静态的内存管理
   所有的静态成员会随着类信息一起加载到方法区中(静态区域)
   所有的静态成员属于类本身的,不属于对象
   静态成员进入到内存后,会附上默认值
   静态的成员变量一定是优于对象之前所存在 *****

6.注意事项:
   a.static修饰的成员变量的访问范围,只跟访问修饰符相关

三、面向对象特征之继承
1.前提:
父类(基类/超类):
   人类:
      成员变量: 姓名,性别
      成员方法: 吃饭,睡觉

子类: extends 父类
   学生类:
      成员变量: 学号
      成员方法: 学习

   老师类:
      成员变量: 工号,工资
      成员方法: 讲课

   工人类:
      成员变量: 工号,工资
      成员方法: 打工

2.概念
   子类继承父类,就会继承父类中的所有成员变量和成员方法.
   子类可以直接访问父类中 非私有的成员变量和方法.

3.语法格式
   子类 extends 父类

4.特点:
   a.Java中只支持单继承,不支持多继承,但是支持多层继承
   b.一个类可以有多个子类
   c.一个子类,有且只能有一个父类

5.子类不能继承的内容(重要)
   a.子类不能继承父类的构造方法,因为子类有自己的构造方法.
   b.子类可以继承父类中私有的成员,但是不能直接访问,可以通过get()/set()访问或修改.

6.优缺点:
   优点: 提高了代码的复用性
   缺点: 
      继承会让类与类之间产生关联关系,类与类之间的耦合度增强了.
      当父类中的内容修改时,子类必须随着一起改变,削弱了子类的独立性.


7.继承中成员访问的特点
  1)成员变量
   a.父类和子类的成员变量名不重名
      父子类出现不重名的情况可以直接使用,对变量没有任何影响.
   b.父类和子类的成员变量名重名
      存在问题:
         只能使用其中一个变量值,
         当在获取值时,会先查看子类中是否存在该变量,
         如果存在则直接使用如果不能存在,则往父类中寻找.
  2)成员方法
   a.父类和子类的成员方法名不重名
      父子类出现不重名的情况可以直接使用,对变量没有任何影响.
   b.父类和子类的成员方法名重名
      会造成方法重写

  3)构造方法
   a.子类构造方法的第一行都会默认添加super(),调用父类的无参构造方法,在执行自己的构造方法.
   b.手动添加super(参数),将不再默认添加无参构造方法,建议手动添加父类无参构造方法,方便子类使用.



8.super关键词: 表示父类对象
 1)修饰成员变量
   格式:
      super.变量名
   使用情况: 想要获取父类中的成员变量时

 2)修饰成员方法
   格式:
      super.方法名
   使用情况: 少用

 3)修饰构造方法


9.方法重写
 1)概念
   前提:必须存在父子类关系
   子类和父类中有相同的方法,方法的方法名、参数、返回值都必须一致,会造成方法的重写。
   注意事项:
      a.子类访问修饰符必须大于等于父类访问修饰符
      b.静态方法不能被重写,如果子类也有相同的方法名,并不是重写父类中的方法
      c.私有方法不能被重写(父类私有成员只能被继承不能被使用)



面试题:
1.方法重写 和 方法重载的区别
   方法重载:
      前提:必须在同一个类中
      相同的方法名,不同的方法参数可以造成方法重载,和返回值无关。
2.父子类关系的执行排列:
   父类静态代码块 -> 子类静态代码块 -> 父类代码块 -> 父类构造 -> 子类代码块 -> 子类构造
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值