JAVA零基础小白自学日志——第十九天

文章目录

今日提要:private\static\final修饰词;同名变量;方法重载和方法重写

1.private(私有)

  • 类不能标记为private,就是所谓的私有类,但在一些特殊的情况下有一种类被称为内部类;虽然类不能被标记为private,但是类依然有访问范围权限,所有不被public修饰的类,都是非公共类,非公共类大多(protected的受众范围稍大)只能被这个类所在的包中的其它类扩展;
  • 被private修饰的方法,再次重复,不会被继承,因为私有方法对外来说不可见,你看见了也是不可见,编译器默认你看不见,虽然都是你写的,你还是看不见,嗯;所以一旦方法被private修饰了,那么这个方法就不存在继承和重写;

2.static(静态)

  • static修饰变量我之前写过了,修饰方法也写过了,不过没涉及到方法的继承和多态
    看段代码吧
java 复制代码
public class TestOne {

	public static void main(String[] args) {
		Animal a = new Wolf();
		a.roam();		

	}

}
class Animal{
	public static void roam () {
		System.out.println("动物在闲逛");
		
	}
}	

class Wolf extends Animal{
	public static void roam() {
		System.out.println("狼在原地盘桓");
	}
}

输出结果:

java 复制代码
动物在闲逛
  • 虽然上面代码里面的父类和子类里面有参数、返回值类型、访问权限范围都一样的同名方法,但是却无法完成方法重写,很明显static阻止了方法的重写,这点在写代码时要注意;

3.final(最终)

[1].fianl修饰变量

  • fianl关键字修饰基础类型变量,其值一旦初始化就不可以改变;
  • fianl关键字修饰引用型变量,对其初始化之后,便不能让其指向另一个对象;
  • fianl关键字修饰的都是常量,fianl关键字可以修饰局部变量;

[2].fianl修饰方法

  • fianl关键字修饰的方法不能被子类重写;
  • 当父类方法为fianl关键字修饰的,子类方法不能含有方法名、参数类型、参数个数和参数顺序都一样的方法;
  • 如果父类有fianl关键字修饰的方法,而此方法权限范围修饰为private(私有),这个并不影响子类有相同名称的方法,原因简单,还是那句话,private不能继承,不可见;

[3].fianl修饰类

  • fianl关键字修饰的类为最终类,最终类处于继承链末端,没有子类可以继承终类;
  • fianl关键字修饰的类,它的类内方法也默认为fianl方法;
  • fianl关键字修饰的类中的变量是可以改变的;

[4].为什么需要fianl关键字修饰类和方法

  • 终类其实底层逻辑就是阻止一个类派生子类,但从安全性的角度去考虑,如果你知道一个类的最终执行结果,并且始终按照这个结果执行,而不会被子类重写,那你就需要定义一个终类,Java API中存在大量的终类,例如:String类就是一个fianl,String是不允许随便更改的;
  • fianl修饰方法其实也是一样的逻辑,如果你要保证一个特定的方法不会被重写,你就可以把那个方法标记为fianl,如果一个类中所有的方法都需要避免被重写,那就需要把这个类标记为fianl;

4.private\static\final的共同点

private\static\final关键字修饰的方法和变量,都属于编译期绑定,也就是早期绑定,都起到了,阻止继承的作用

5.同名变量

如果子类拥有和父类一样的变量名,子类变量将屏蔽父类变量的继承,这点很重要,切记,切记!

6.方法重载和方法重写

项目 方法重载 方法重写
简介 重载,只是在同个类中,有相同方法名的不同方法而已,与继承和多态没有任何关系 在继承关系中子类方法对父类(超类、基类)方法的覆盖重写
同一个类 有继承关系的类
方法名 相同 相同
方法参数 参数个数、类型、顺序都不同 参数列表相同
返回值类型 可以不同 必须相同
调用方式 参数决定 创建的实际对象决定
绑定 早期绑定,编译期绑定 后期绑定,动态绑定
private\static\final 不影响 阻止继承,不会产生重写

真正的Java代码之路,应该说是从继承和多态开始的,这才是面向对象OO的基础知识,预祝大家和我一样学的愉(tou)快(yun);

相关推荐
Allen_LVyingbo3 分钟前
Python常用医疗AI库以及案例解析(2025年版、上)
开发语言·人工智能·python·学习·健康医疗
小哈龙7 分钟前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
在未来等你8 分钟前
JVM调优实战 Day 15:云原生环境下的JVM配置
java·jvm·性能优化·虚拟机·调优
funnycoffee1239 分钟前
Huawei 6730 Switch software upgrade example版本升级
java·前端·华为
Java初学者小白9 分钟前
秋招Day15 - Redis - 缓存设计
java·数据库·redis·缓存
缘来是庄9 分钟前
设计模式之组合模式
java·设计模式·组合模式
DKPT11 分钟前
Java组合模式实现方式与测试方法
java·笔记·学习·设计模式·组合模式
G探险者26 分钟前
《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
java·开发语言·rpc
刘大猫2634 分钟前
Datax安装及基本使用
java·人工智能·算法
Kyrie_Li1 小时前
(十五)Spring Test
java·后端·spring