java方法的重写、package和import、访问控制修饰符、静态变量

发布于:2022-12-17 ⋅ 阅读:(438) ⋅ 点赞:(0)

方法的重写(override/overriding):重新写、覆盖

  • 发生在父子类中,方法名相同,参数列表相同
  • 重写方法被调用时,看对象的类型
class 餐馆{
    void 做餐(){ 做中餐 }
    }
    //1)我还是想做中餐---------------不需要重写
       class Aoo extends 餐馆{
    }
    //2)我想改做西餐-----------------需要重写
    class Aoo extends 餐馆{
    void 做餐(){ 做西餐 }
    }
    //3)我想在中餐基础之上加入西餐------需要重写(先super中餐,再加入西餐)
    class Aoo extends 餐馆{
    void 做餐(){
    super.做餐();
    做西餐
    }
}

遵循"两同两小一大"原则:

两同:

  • 方法名相同
  • 参数列表相同

两小:

派生类方法的返回值类型小于或等于超类方法的

  • void和基本类型时,必须相等
  • 引用类型时,小于或等于

派生类方法抛出的异常小于或等于超类方法的

//超类大,派生类小
class Aoo{ //超类(大)
        void show(){}
        double test(){ return 0.0; }
        Boo sayHi(){ return null; }
        Aoo say(){ return null; }
      }
class Boo extends Aoo{ //派生类(小)
    //int show(){ return 1; } //编译错误,void时必须相等
    //int test(){ return 0; } //编译错误,基本类型时必须相等
    //Boo sayHi(){ return null; } //编译错误,引用类型时必须小于
    或等于
    Boo say(){ return null; } //正确,小于或等于
}

一大:

  • 派生类方法的访问权限大于或等于超类方法的

package和import:

package:声明包

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

import:导入类

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

  • 先import导入类再访问类
  • 类的全称

访问控制修饰符:-----------------------保护数据的安全

  • public:公开的,任何类
  • private:私有的,本类
  • protected:受保护的,本类、派生类、同包类
  • 默认的:什么也不写,本类、同包类

说明:

1. 类的访问权限,只能是public或默认的。而类中成员的访问权限,如上4种都可以。

2. 访问权限由低到高依次为:private<默认的<protectecd<public

 static:静态的

静态变量:

  • 由static修饰
  • 属于类,存储在方法区中,只有一份
  • 常常通过类名点来访问
  • 何时用:所有对象所共享的数据(图片、音频、视频等)

静态方法:

  • 由static修饰
  • 属于类,存储在方法区中,只有一份
  • 常常通过类名点来访问
  • 静态方法中没有隐式this传递,不能直接访问实例成员
  • 何时用:方法的操作与对象无关(不需要访问对象的属性)
class Hoo{
    int a; //实例变量(由对象来访问)
    static int b; //静态变量(由类名来访问)
    void show(){ //有this
    System.out.println(this.a);
    System.out.println(Hoo.b);
}
    static void test(){ //没有this
//静态方法中没有隐式this传递
//没有this就意味着没有对象
//而实例变量a是必须由对象来访问的
//所以如下代码发生编译错误
    //System.out.println(a); //编译错误
    System.out.println(Hoo.b);
    }
}
//演示何时设计为静态方法
class Ioo{
    int a; //对象的属性
    //在show()中访问了对象的属性,意味着show()方法与对象有关,不能设计为静态方
    法
    void show(){
    System.out.println(a);
}
//在plus()中没有访问对象的属性,意味着plus()方法与对象无关,可以设计为静态
方法
    static int plus(int num1,int num2){
    int num = num1+num2;
    return num;
    }
}
    public class StaticDemo {
    public static void main(String[] args) {
    Hoo.test(); //常常通过类名点来访问
    }
}

静态块:

由static修饰

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

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


网站公告

今日签到

点亮在社区的每一天
去签到