目录

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

2. package和import:

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

4. static:静态的

5. final:最终的、不可改变的---------------------应用率低

6. static final常量:应用率高

7. 抽象方法:

8. 抽象类:


1. 方法的重写(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; } //正确,小于或等于
}

派生类方法抛出的异常小于或等于超类方法的-------------------API异常之后
一大:
        派生类方法的访问权限大于或等于超类方法的

2. package和import:

package:声明包
作用:避免类的命名冲突
同包中的类不能同名,但不同包中的类可以同名
类的全称:包名.类名
建议:包名所有字母都小写,包名常常有层次结构
import:导入类
同包中的类可以直接访问,但不能包中的类不能直接访问,若想访问:
先import导入类再访问类-----------建议
类的全称---------------------------------太繁琐、不建议

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

public:公开的,任何类
private:私有的,本类
protected:受保护的,本类、派生类、同包类------------------------应用率低
默认的:什么也不写,本类、同包类--------------------------------------java不建议默认权限
说明:
1. 类的访问权限,只能是public或默认的。而类中成员的访问权限,如上4种都可
以。
2. 访问权限由低到高依次为:private<默认的<protected<public
//访问控制修饰符的演示
public class Coo {
        public int a; //任何类
        protected int b; //本类、派生类、同包类
        int c; //本类、同包类
        private int d; //本类
void show(){
        a = 1;
        b = 2;
        c = 3;
        d = 4;
        }
}
class Doo{ //----------------------演示private
void show(){
        Coo o = new Coo();
        o.a = 1;
        o.b = 2;
        o.c = 3;
        //o.d = 4; //编译错误
        }
}

import ooday04.Coo;
public class Eoo { //-----------------演示同包的
        void show(){
        Coo o = new Coo();
        o.a = 1;
        //o.b = 2; //编译错误
        //o.c = 3; //编译错误
        //o.d = 4; //编译错误
        }
}
class Foo extends Coo{ //跨包继承-------演示protected
        void show(){
        a = 1;
        b = 2;
        //c = 3; //编译错误
        //d = 4; //编译错误
        }
}

4. static:静态的

静态变量
由static修饰属于类,存储在方法区中,只有一份
常常通过类名点来访问
何时用:所有对象所共享的数据(图片、音频、视频等)
//演示静态变量
class Goo{
int a;
static int b;
Goo(){
        a++;
        b++;
}
void show(){
System.out.println("a="+a+",b="+b);
        }
}
public class StaticDemo {
        public static void main(String[] args) {
                Goo o1 = new Goo();
                o1.show();
                Goo o2 = new Goo();
                o2.show();
                Goo o3 = new Goo();
                o3.show();
                System.out.println(Goo.b); //常常通过类名点来访问
        }
}


 
静态方法:
由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修饰
属于类,在类被加载期间自动执行,因一个类只被加载一次,所以静态块只执行一次
何时用:加载/初始化静态资源(图片、音频、视频等)
//演示静态块
class Joo{
        static{
        System.out.println("静态块");
        }
        Joo(){
        System.out.println("构造方法");
        }
}
        public class StaticDemo {
                public static void main(String[] args) {
                Joo o4 = new Joo();
                Joo o5 = new Joo();
                Joo o6 = new Joo();
        }
}

5. final:最终的、不可改变的---------------------应用率低

修饰变量:变量不能被改变
class Aoo{
  final int a = 5;
  void show(){
    //a = 55; //编译错误,final的变量不能被改变
 }
}
修饰方法:方法不能被重写
class Boo{
  final void show(){ }
  void test(){ }
}
class Coo extends Boo{
  //void show(){ } //编译错误,final的方法不能被重写
  void test(){ }
}
修饰类:类不能被继承
final class Doo{}
//class Eoo extends Doo{} //编译错误,final的类不能被继承
class Foo{}
final class Goo extends Foo{} //正确,不能当老爸,但能当儿子

6. static final常量:应用率高

必须声明同时初始化
常常通过类名点来访问,不能被改变
建议:常量所有字母都大写,多个单词之间用_分隔
编译器在编译时会将常量直接替换为具体的数,效率高
何时用:数据永远不变,并且经常使用
public class StaticFinalDemo {
public static void main(String[] args) {
    System.out.println(Hoo.PI); //常常通过类名点来访问
    //Hoo.PI = 3.1415926; //编译错误,常量不能被改变
    //1)加载Ioo.class到方法区中
    //2)静态变量num一并存储在方法区中
    //3)到方法区中获取num的值并输出
    System.out.println(Ioo.num);
    //编译器在编译时会将常量直接替换为具体的值,效率高
    //相当于System.out.println(5);
    System.out.println(Ioo.COUNT);
 }
class Ioo{
  public static int num = 5; //静态变量
  public static final int COUNT = 5; //常量
}
class Hoo{
  public static final double PI = 3.14159;
  //public static final int NUM; //编译错误,常量必须声明同时初始化
}

7. 抽象方法:

由abstract修饰
只有方法的定义,没有具体的实现(连{}都没有)

8. 抽象类:

由abstract修饰
包含抽象方法的类必须是抽象类
抽象类不能被实例化(new对象)
意味着画对象的行为为共有行为,所以设计在SeaObject超类中,
每个对象画的代码都是一样的,所以设计为普通方法
派生类:
重写抽象类中的所有抽象方法-----------变不完整为完整
也声明为抽象类------------------------------一般不这么做
抽象类的意义:
封装共有的属性和行为---------------------代码复用
为所有派生类提供统一的类型------------向上造型(代码复用)
可以包含抽象方法,为所有派生类提供统一的入口(向上造型后能点出来),同时可以达到
强制必须重写的目的

抽象方法存在的意义是什么?
保证当发生向上造型时,通过超类的引用能点出来那个方法-----------保证能点出方法来
既然抽象方法的意义是保证能点出来,那为什么不设计为普通方法呢?

设计为普通方法,意味着派生类可以重写也可以不重写,但设计为抽象方法,则可以强
制派生类必须重写-----------强制派生类重写,可以达到统一的目的

【java基础面向对象】方法的重写、 package和import包、访问控制修饰符,static,final,static final,抽象方法相关推荐

  1. Java基础学习必备(2)(继承、多态、修饰符、抽象类、接口)

    文章目录 继承 继承的概述 继承的好处和弊端 继承中变量的访问特点 super关键字 继承中构造方法的访问特点 继承中成员方法的访问特点 super内存图 方法重写 方法重写注意事项 Java中继承的 ...

  2. 【Java基础】多态、equals、造型cast、访问修饰符(public、protected、default、private)、static、final

    1.面型对象–多态 多态的概念:多态性就是指同样的消息被类的不同的对象接收时导致的完全不同的行为的一种现象.这里的消息即对类成员函数的调用. 实现上面调用宠物叫,每种宠物有各自的叫声 public c ...

  3. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  4. Java 基础 - 面向对象(不错N多教程集合)

    著作权归https://pdai.tech所有. 链接:Java 基础 - 面向对象 | Java 全栈知识体系 本文主要介绍Java OOP 面向对象基础和相关类图.@pdai Java 基础 - ...

  5. 基于Java基础-面向对象实现植物大战僵尸简易版

    基于Java基础-面向对象实现植物大战僵尸简易版 前言 游戏设计 游戏对象 游戏内容 游戏优化 放置植物的优化 移除植物的优化 游戏可玩性的优化 添加游戏背景音乐 后续优化 源码分享 前言 从零开始学 ...

  6. Java基础学习——方法

    Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...

  7. (20)Java基础 --面向对象(1)

    目录 面向对象 一.概述 二.生活举例 三.类与对象的关系 四.类的构成 五.类的定义 类的属性 类的方法 创建实例(对象) 内存分配图 六.对象的基本使用 七.局部变量与成员变量的区别 八.面向对象 ...

  8. 【Java基础面向对象】 汽车销售管理系统

    前言: 因为是初学者,我已自己能理解的范围来写这篇博客,对面向对象加以熟悉. 基本知识点: 面向对象: 封装:类.属性.方法 从学习面向对象开始,我们基本不将主函数和属性和方法写在同一个类中 我们会创 ...

  9. Java10-day01【继承(变量-构造方法访问-成员方法 访问)、super内存图、方法重写、继承、包、import、权限修饰符、final、static】

    视频+资料(工程源码.笔记)[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java ...

最新文章

  1. mfc 制作不同的文档模板mdi不同的子窗体_制作ACK集群自定义节点镜像的正确姿势...
  2. 中文预训练模型ZEN开源,效果领域内最佳,创新工场港科大出品
  3. pygame学习和python巩固——字体显示
  4. nyoj1307Linux的文件权限对不对
  5. 理科大学二本计算机系,大学最好就业的二本专业:高校男生女生二本理科比较好的专业...
  6. Ubuntu 安装 Sun JDK
  7. bookStore第二篇【图书模块、前台页面】
  8. 软考备战系列一----软件测试基础
  9. 远控免杀专题 14 ---AVIator
  10. Glib2之dbus用法(五)
  11. ComponentArt Web.UI控件的bug及解决办法
  12. docker及入门使用(centos7.6)
  13. Java中的JUnit单元测试
  14. 计算机桌面黑屏有鼠标,win7系统启动黑屏只有显示鼠标指针怎么办(图文)
  15. 在线运行Java代码获取APNIC中国区的ip段,用作绕过国内ip
  16. XShell免费正版远程控制ssh客户端
  17. WIFI设备配网之微信小程序开发AP配网
  18. Nacos Committer 张龙:Nacos Sync 的设计原理和规划
  19. Xen - Networking
  20. vue 二维码+条形码识别

热门文章

  1. (在WPS或者WORD中使用MathType编辑数学公式)写论文必备
  2. 猿创征文|从mysql 到kingbase(人大金仓)
  3. ROS(五)之话题编程:msg文件
  4. 常见的反常积分判断敛散性方法
  5. Field myFeignClient in com.zkh.controller.FeignController required a bean of type 'com.zkh.feign.MyF
  6. (一)大型电商详情页亿级缓存架构简介
  7. python 轨迹 车辆_ArcGIS+ArcPy制作船舶(车辆)轨迹热力图
  8. maven常用中央仓库
  9. 腾讯视频url获取方法
  10. MATLAB函数——lowpass