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);

相关推荐
咕咕嘎嘎10245 小时前
C/C++内存对齐
java·c语言·c++
认真敲代码的小火龙5 小时前
【JAVA项目】基于JAVA的图书管理系统
java·开发语言·课程设计
爱敲代码的小冰5 小时前
js 时间的转换
开发语言·前端·javascript
缘三水5 小时前
【C语言】14.指针(4)
c语言·开发语言·指针·语法
电子_咸鱼5 小时前
【QT SDK 下载安装步骤详解 + QT Creator 导航栏使用教程】
服务器·开发语言·网络·windows·vscode·qt·visual studio code
西岭千秋雪_5 小时前
MySQL日志梳理(存储引擎层)
java·数据库·分布式·mysql·oracle
AAA阿giao5 小时前
深入理解 JavaScript 中的面向对象编程(OOP):从构造函数到原型继承
开发语言·前端·javascript·原型·继承·原型模式·原型链
2301_797312265 小时前
学习Java22天
java·开发语言
jllllyuz5 小时前
MATLAB雷达系统设计与仿真
开发语言·matlab
IMPYLH5 小时前
Lua 的 type 函数
开发语言·笔记·后端·junit·lua