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

    • 发生在父子类中,方法名相同,参数列表相同
    • 重写方法被调用时,看对象的类型------------这是规定,记住就OK

    当派生类觉得超类的行为不够好时,可以重写

点击查看代码
  我继承了一个中餐馆
class Aoo{
void do(){
做中餐
}
}
A:我还是想做中餐------------不需要重写
class Boo extends Aoo{
}
B:我想改做西餐--------------需要重写
class Boo extends Aoo{
void do(){
做西餐
}
}
C:我想在中餐基础之上加西餐-----需要重写(先super中餐,再加入西餐)
class Boo extends Aoo{
void do(){
super.do();
做西餐
}
}
  1. 重写与重载的区别:重点(常见的面试题)

    • 重写:发生在父子类中,方法名相同,参数列表相同

      一般用于在派生类中修改超类的方法

    • 重载:发生在同一类中,方法名相同,参数列表不同

      是完全不同的方法,只是方法名相同而已

  2. package和import:

    • package:声明包

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

      说明:package声明包必须位于第一行

    • import:导入类

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

        • 先import导入类,再访问类----------建议
        • 类的全称-----------------------------------太繁琐,不建议

      说明:import导入类必须位于声明包的下一行

  3. 访问控制修饰符:

    封装的意义:隐藏一些东西,暴露一些东西,来保护数据的安全

    • public:公开的,任何类
    • private:私有的,本类
    • protected:受保护的,本类、派生类、同包类
    • 默认的:什么也不写,本类、同包类
    1. 类的访问权限只能是public或默认的
    1. 类中成员的访问权限如上四种都可以
点击查看代码
  //封装的意义
class Card{
private String cardId;
private String cardPwd;
private double balance; public boolean payMoney(double money){ //支付金额
if(balance>=money){
balance-=money;
return true;
}else{
return false;
}
} public boolean checkPwd(String pwd){ //检测密码
if(pwd与cardPwd相同){
return true;
}else{
return false;
}
}
}
//访问权限范围:
package ooday04;
//演示访问控制修饰符
public class Aoo {
public int a; //任何类
protected int b; //本类、派生类、同包类
int c; //本类、同包类
private int d; //本类 void show(){
a = 1;
b = 2;
c = 3;
d = 4;
}
} class Boo{ //---------------演示private
void show(){
Aoo o = new Aoo();
o.a = 1;
o.b = 2;
o.c = 3;
//o.d = 4; //编译错误
}
} package ooday04_vis;
import ooday04.Aoo;
public class Coo { //演示同包的概念
void show(){
Aoo o = new Aoo();
o.a = 1;
//o.b = 2; //编译错误
//o.c = 3; //编译错误
//o.d = 4; //编译错误
}
} class Doo extends Aoo{ //演示protected
void show(){
a = 1;
b = 2;
//c = 3; //编译错误
//d = 4; //编译错误
}
}
  1. static:静态的

    • 静态变量:

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

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

    • 由static修饰
    • 属于类,在类被加载期间自动执行,一个类只被加载一次,所以静态块也只执行一次
    • 何时用:初始化/加载静态资源(图片、音频、视频等)
点击查看代码
  public class StaticDemo {
public static void main(String[] args) {
Hoo o4 = new Hoo();
Hoo o5 = new Hoo();
Hoo o6 = new Hoo();
}
}
//演示静态块
class Hoo{
static {
System.out.println("静态块");
}
Hoo(){
System.out.println("构造方法");
}
}
``` </details> ## 精华笔记 1. 方法的重写(override/overriding):重新写、覆盖 - 发生在父子类中,方法名相同,参数列表相同
- 重写方法被调用时,看对象的类型------------这是规定,记住就OK >当派生类觉得超类的行为不够好时,可以重写 2. 重写与重载的区别:重点(常见的面试题) - 重写:发生在父子类中,方法名相同,参数列表相同 > 一般用于在派生类中修改超类的方法 - 重载:发生在同一类中,方法名相同,参数列表不同 > 是完全不同的方法,只是方法名相同而已 3. package和import: - package:声明包 - 作用:避免类的命名冲突
- 同包中的类不能同名,不同包中的类可以同名
- 类的全称:包名.类名,包名常常有层次结构
- 建议:包名所有字母都小写 > 说明:package声明包必须位于第一行 - import:导入类 - 同包中的类可以直接访问,不同包的类不能直接访问,若想访问:
- 先import导入类,再访问类----------建议
- 类的全称-----------------------------------太繁琐,不建议 > 说明:import导入类必须位于声明包的下一行 4. 访问控制修饰符: > 封装的意义:隐藏一些东西,暴露一些东西,来保护数据的安全 - public:公开的,任何类
- private:私有的,本类
- protected:受保护的,本类、派生类、同包类
- 默认的:什么也不写,本类、同包类 > 1. 类的访问权限只能是public或默认的
>
> 2) 类中成员的访问权限如上四种都可以 5. static:静态的 - 静态变量:
- 由static修饰
- 属于类,存储在方法区中,只有一份
- 常常通过类名点来访问
- 何时用:所有对象所共享的数据(图片、音频、视频等)
- 静态方法:
- 由static修饰
- 属于类,存储在方法区中,只有一份
- 常常通过类名点来访问
- 静态方法没有隐式this传递,所以不能直接访问实例成员
- 何时用:方法的操作与对象无关
- 静态块:
- 由static修饰
- 属于类,在类被加载期间自动执行,一个类只被加载一次,所以静态块也只执行一次
- 何时用:初始化/加载静态资源(图片、音频、视频等) 补充: 1. 成员变量分两种: - 实例变量:没有static修饰,属于对象的,存储在堆中, ​ 有几个对象就有几份,通过引用打点来访问 - 静态变量:有static修饰,属于类的,存储在方法区中, ​ 只有一份,通过类名打点来访问 2. 内存管理:由JVM来管理的 - 堆:new出来的对象(包括成员变量)
- 栈:局部变量(包括方法的参数)
- 方法区:.class字节码文件(包括静态变量、所有方法) 3. 在构造方法中给实例变量做初始化 在静态块中给静态变量做初始化

ooday04 Java_面向对象_重写_static的更多相关文章

  1. Java之旅_面向对象_重写和重载

    参考并摘自:http://www.runoob.com/java/java-override-overload.html 重写(Override) 子类对父类(允许访问的)方法的实现过程进行重新编写, ...

  2. 黑马程序员_Java面向对象_内部类

    6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...

  3. 【Java基础】【08面向对象_继承&方法&final】

    08.01_面向对象(代码块的概述和分类)(了解)(面试的时候会问,开发不用或者很少用) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以 ...

  4. Java_面向对象

    目录 一.封装 二.继承 三.多态 四.重载与重写 五.接口与抽象类 六.继承与组合 七.初始化块 面向对象的三大特征:封装.继承.多态. 一.封装 是指将对象的状态信息都隐藏在对象内部,不允许外部程 ...

  5. 【Java基础】【09面向对象_多态&抽象类&接口】

    09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...

  6. Python_面向对象_类2

    类的几个装饰器方法: @classmethod (类方法):使之无法访问实例变量 class Animal(object): def __init__(self, name): self.name = ...

  7. Python_面向对象_类1

    面向对象:减少重复代码,提高效率,比函数式编程更高效 类的创建: 实例属性又称:成员变量,成员属性(或者字段) 面向对象的三大特性: 一.封装 把客观事物封装为抽象的类,并对外只暴露一个可用接口 使用 ...

  8. Java之旅_面向对象_抽象类

    参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...

  9. 13_Java面向对象_第13天(static、final、匿名对象、内部类、包、修饰符、代码块)_讲义

    今日内容介绍 1.final 关键字 2.static 关键字 3.匿名对象 4.内部类 5.包的声明与访问 6.访问修饰符 7.代码块 01final关键字概念 A: 概述 继承的出现提高了代码的复 ...

随机推荐

  1. Windows常用cmd命令总结

    cmd是command的缩写,即命令提示符. 运行操作: 使用"Win+R"快捷键召唤出运行窗口,再在运行中输入cmd即可. 1.ping 用法: 常用举例: ping www.g ...

  2. Python学习4(字典的内存分布)

    1.字典:是python数据类型之一,字典通过花括号来包含数据项,字典的每个元素由2个部分组成,键:值,字典是根据键来找对应的值. data = {"name": "Et ...

  3. Java学习笔记-基础语法Ⅴ

    学习一些Java常用的API Math:包含执行基本数字运算的方法 如果没有构造方法,一般类的成员都是静态的,通过类名可以直接调用 Java中有两种random函数,Math.Random()函数能够 ...

  4. 基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  5. MySQL闪回工具之binlog2sql

    一.binlog2sql 1.1 安装binlog2sql git clone https://github.com/danfengcao/binlog2sql.git && cd b ...

  6. HTML区块

    1.HTML 可以通过 <div> 和 <span>将元素组合起来. 2.HTML <div> 元素 HTML <div> 元素是块级元素,它可用于组合 ...

  7. [2021-TKK 暑期训练第一场] 1585:下馆子-3

    题目做了超链接 参考官方题解,作部分优化 下馆子 -3 题意: 给定n组数据,由name,time构成 当只有一个最大值时,输出该同学 当不止有一个最大值时,输出最先大于等于max次的同学 题解: 考 ...

  8. Dockerfile 使用 SSH

    如果在书写 Dockerfile 时,有些命令需要使用到 SSH 连接,比如从私有仓库下载文件等,那么我们应该怎么做呢? Dockerfile 使用 SSH Dockerfile 文件配置 为了使得 ...

  9. 每天一个 HTTP 状态码 206

    206 Partial Content 206 Partial Content 是当客户端请求时使用了 Range 头部,服务器端回复的响应,表示只响应一部分内容. 实例 请求: GET /favor ...

  10. 20212115朱时鸿实验一《python程序设计》实验报告

    ------------恢复内容开始------------ #学号20212115 <python程序设计>实验一报告 课程: <python程序设计> 班级:2121 姓名 ...