首页 > 编程语言 >JAVA零基础小白自学日志——第十九天

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

时间:2024-07-20 19:55:47浏览次数:16  
标签:JAVA 重写 private 第十九 fianl static 修饰 日志 方法

文章目录


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

1.private(私有)

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

2.static(静态)

  • static修饰变量我之前写过了,修饰方法也写过了,不过没涉及到方法的继承和多态
    看段代码吧
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("狼在原地盘桓");
	}
}

输出结果:

动物在闲逛
  • 虽然上面代码里面的父类和子类里面有参数、返回值类型、访问权限范围都一样的同名方法,但是却无法完成方法重写,很明显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);

标签:JAVA,重写,private,第十九,fianl,static,修饰,日志,方法
From: https://blog.csdn.net/mycqyjn/article/details/140529701

相关文章

  • java2
    7.15-7.161.完成了PTA上的函数题和两道编程题,期间遇到了一些不懂得知识,学习了链表相关的知识,以及希尔排序算法,并复习了二分查找算法;同时也遇到了一些比较复杂的题目,通过在网上观看题目解析后有了思路并成功写出来,也出现过许多细节上的错误,这也使我更加认真思考每一处问题2.观看......
  • Java 代理模式详解
    Java代理模式详解1.代理模式代理模式是一种比较好理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象(realobject)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目......
  • Java之线程池
    一、什么是线程池,为什么使用线程池?线程池其实是一种池化的技术的实现,实现资源的一个复用,避免资源的重复创建和销毁带来的性能开销在线程池中,线程池可以管理一堆线程,让线程执行完任务之后不会进行销毁,而是继续去处理其它线程已经提交的任务线程池的优点:降低资源消耗。通过......
  • Java中的Heap(堆)(如果想知道Java中有关堆的知识点,那么只看这一篇就足够了!)
        前言:(Heap)是一种特殊的完全二叉树,它在诸多算法中有着广泛的应用,本文将详细介绍Java中的堆。✨✨✨这里是秋刀鱼不做梦的BLOG✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客先让我们看一下本文大致的讲解内容:目录1.堆的初识       ......
  • 自学Java第三周
    本周学习一、循环1.while循环先判断条件,符合再执行。while(){}2.dowhile循环先执行一次,再判断条件。do{}while();3.forfor(初始条件;判断条件;循环迭代语句){}4.嵌套循环各种类型的循环都可以做内外侧循环。for(){for(){......;}}for(){while(){......;}}...5.控制循环结构break:完全结束一个循环,跳出循环体。continue:结束本次循环,开始下次循......
  • Java--抽象类
    目录抽象类的概念抽象类的语法抽象类的作用抽象类的概念在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。我们之前所学习的Animal类或者Shape类,就可......
  • java进阶(面向对象实例代码)
    1.抽象类和接口抽象类示例abstractclassAnimal{abstractvoidmakeSound();voidsleep(){System.out.println("Sleeping...");}}classDogextendsAnimal{@OverridevoidmakeSound(){System.out.println("Bark&......
  • 类明显存在却报 package not found, Java程序中专门被其他工程所依赖的common jar用sp
    先上官方链接:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/maven-plugin/examples/repackage-classifier.html在使用SpringBoot构建通用JAR库时,尤其是当通springboot默认的过spring-boot-maven-plugin插件打包时。如果遇到了类存在但报“packagenotfound......
  • Java基础语法01-运算符&流程控制语句If
    Java基础语法1.运算符1.1算术运算符(理解)1.1.1运算符和表达式运算符:对常量或者变量进行操作的符号表达式:用运算符把常量或者变量连接起来符合java语法的式子就可以称为表达式。​不同运算符连接的表达式体现的是不同类型的表达式。举例说明:inta=10;intb=2......
  • Java基础语法02——While循环和Switch
    4.switch语句4.1switch语句结构(掌握)格式switch(表达式){ case1: 语句体1; break; case2: 语句体2; break; ... default: 语句体n+1; break;}执行流程:首先计算出表达式的值其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中......