面向对象05

面向对象05

1、方法的重写(重新写,但还是同一个方法)
  • 发生在父子类中,方法签名(方法名+参数列表)完全相同

  • 重写方法被调用时,只看调用者的对象类型(规定)

    public class Test01 {
        int a;
        void say(){
            System.out.println("这是父类方法");
        }
    }
    class TempClass extends Test01{
        int b;
        void say(){
            System.out.println("这是子类方法");
        }
        public static void main(String[] args) {
            Test01 test01 = new Test01();
            TempClass tempClass = new TempClass();
            Test01 test02 = new TempClass();
            test01.say();//这是父类方法
            tempClass.say();//这是子类方法
            test02.say();//这是子类方法
    
    
        }
    }
    
2、重写与重载的区别
  • 重写(override):发生在父子类中,方法签名(方法名+参数列表)完全相同 本质上,还是同一个方法
  • 重载(overlord):发生在同一个类中,方法名相同,参数列表不同 本质上,完全是不同的方法
3、 package和import
  • package:声明包

    • 作用:避免类的命名冲突
    • 同包中的类不能同名,但是不同包中的类可以同名
    • 类的全称:包名.类名,包名常常有层次结构
    • 建议:包名所有字母都小写
  • import:导入类

    • 同包中的类可以直接访问,而不同包中的类不能直接访问,若想访问:

      先import导入类,再访问---------建议

      类的全称-------------------------------太繁琐,不建议

4、访问控制修饰符(封装:数据安全)
  • public:公开的,任何类

  • private:私有的,本类

  • protected:受保护的,本类、派生类、同包类-----------应用率低

  • default默认的:什么也不写,本类、同包类-------------------------java不建议默认权限

    说明:

    \1. 类的访问权限,只能是public或默认的(内部类除外)

    \2. 类中成员的访问权限,如上4种都可以

    \3. 访问权限由低到高依次为:private<默认的<protected<public

5、static:静态的
  1. static+变量(静态变量)

    • 属于类,存储于方法区中,只有一份(是类的特有属性)

    • 通过类名点来访问(也可以对象)

    • 一般是所有对象共享的数据(图片、音频、视频等)

      public class Test01 {
           static int a;
           int b;
      
          public Test01() {
              a++;
              b++;
          }
      
          void say(){
              System.out.println("这是父类方法");
          }
      }
      class TempClass extends Test01{
      
          void say(){
              System.out.println("这是子类方法");
          }
          public static void main(String[] args) {
              Test01 test01 = new Test01();
              System.out.println(test01.a);//1
              System.out.println(test01.b);//1
              Test01 test02 = new Test01();
              System.out.println(test02.a);//2
              System.out.println(test02.b);//1
              Test01 test03 = new Test01();
              System.out.println(test03.a);//3
              System.out.println(test03.b);//1
      //a和b都是Test01的成员变量,区别在于一个是静态(static修饰)另一个不是  在内存中,静态变量在加载类时已经存入方法区,每new一次对象,动用构造方法时,自增的都是方法区中的那个a,所以说静态变量是类的属性,属于类   而b在每次new对象时都会创建新的一个b存放在堆中,是属于对象的实例变量
      
      
      
      
          }
      }
      
  2. static+方法(静态方法)

    • 属于类,存储方法区中,只有一份

    • 常常通过类名点来访问

    • 静态方法中没有隐式this传递,所以不能直接访问实例成员(因为静态方法已经存在方法区中,不需要对象就可调用,若要访问实例成员,可以在静态方法中new一个对象来操作)

    • 何时用:方法的操作与对象无关(方法中不操作对象的属性和行为)

      例如Math类中的许多方法就不需要new对象就可以操作

  3. static+代码块(静态块)

  • 由static修饰

  • 属于类,在类被加载期间自动执行,因一个类只被加载一次,所以静态块也只执行一次

  • 何时用:初始化/加载静态资源(图片、音频、视频等)

    ----------为static变量赋值

代码块:就是一对大括号所包的代码

在加载类时执行静态块,而加载类只执行一次(后续new新对象时不会再加载)

补充:

  1. 属性私有化(private),行为(方法)公开化(public)

  2. 成员变量分两种:

    实例变量:没有static修饰,属于对象的,存储在堆中,有几个对象就有几份,通过对象/引用点来访问

    静态变量:有static修饰,属于类的,存储在方法区中,只有一份,常常通过类名点来访问

    一般在构造方法中对实例变量进行初始化,在静态块中对静态变量进行初始化

  3. 内存管理:由JVM来管理的

堆:new出来的对象(包括实例变量、数组的元素)

栈:局部变量(包括方法的参数)

方法区:.class字节码文件(包括静态变量、所有方法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值