Java学习笔记10(零压力理解继承多态权限修饰符)

news/2024/7/3 12:25:52 标签: 多态, 面向对象编程, java, object

文章目录

  • 继承
  • 方法的重写(override)
  • 四种访问权限修饰符:
  • 关键字super
  • 类对象的实例化的底层原理
  • 多态
  • instanceof操作符
  • object

继承

继承是Java最重要的,类之间有内在联系,子类和父类。子类比父类更 具体,表示更少的对象。子类是扩展,extends ,这个单词翻译过来也是扩展。

假如有汽车类,又有自动驾驶车类,你只要在继承汽车类加上自动驾驶方法就行了。

代码不用重复写。还是人类 Person为例,这个类里面有属性和方法。

java">public class Person {
	/**
	 * 父类,有些共性代码
	 */
	int age;
	String name;
	int sex;
	
	public void showInfo() {
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
	}
}

格式:
继承的关键字extends
类修饰名 class 子类名 extends 父类名

你看这里学生类就继承了人类的属性,name ,age ,sex.
还继承了方法。 showInfo(){}
复习一下this关键字
在这里插入图片描述

子类写特有的代码就行!
以学生类为例:

java">public class Student extends Person {
	String school;//不用再去定义age,name,sex
	
	public void showInfo() {
		System.out.println(this.school);
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
	}

}

注意:

  1. 继承提高了代码的效率
  2. 不要为了继承而继承(比如狗类继承人类,no!)
  3. 继承是多态的前提(后面讲)

笔记:继承,子类不是父类的子集,是扩展(extends)!(比如你比你爸更优秀)
子类不能访问父类private变量,无这个权限(比如你不能继承你爸的银行卡密码)

一个子类只能有一个父类(你只能有一个爸爸,但是你爸爸可以有多个儿子)

Java不支持多重继承,但是可以用接口来解决这个问题
Java接口

方法的重写(override)

改的只是方法体的代码就是{}里面的东西
在子类里面按住键盘的ALT+/, 如下
在这里插入图片描述
这就是方法的重写!

在这里插入图片描述
在这里插入图片描述

笔记:
方法的重载:一个类有哦多个同名的方法
方法的重写:子类可以重写写父类的方法,覆盖父类的方法;

子类调用父类的方法

java">public class Student extends Person {
	String school;//不用再去定义age,name,sex
	
//	public void showInfo() {
		System.out.println(this.school);
		System.out.println(this.name);
		System.out.println(this.age);
		System.out.println(this.sex);
//	
//	}
	
	
	public static void main(String[] args) {
		Student stu = new Student();
		stu.showInfo();//子类调用父类的方法
	}

}

在这里插入图片描述
把重写的部分注释掉,这个就变成了了子类对父类方法的继承。

四种访问权限修饰符:

笔记:
如果子类和父类在同一个包下:除了private不能访问,其他三种都可以访问,继承使用。
如果子类和父类不在同一个包下:除了private,default不能访问,只有protected public才可以访问,继承使用。

关键字super

为什么有这个关键字呢,因为继承可以是多层的,比如说你和你爸爸,你爸爸和你爷爷。为了区分你继承你爸爸还是你继承你爷爷的东西,用super指明。
笔记:
用super可以追溯父类(或父类的父类)的成员变量;
用super可以追溯父类(或父类的父类)的成员方法;
super可以自动继承父类的无参构造;
父类只有有参构造的时候,那么子类必须构建有参来调用父类的有参构早,调用父类构造方法得写在第一行。

this和super 的区别:在这里插入图片描述

类对象的实例化的底层原理

图片多看几遍!!!
在这里插入图片描述
在这里插入图片描述

多态

重载:相同的方法,不同的逻辑
重写:子类对父类方法的覆盖,同方法名,覆盖逻辑。
对象的多态

java">Person e = new Student();
		e.showInfo();

这个e.showInfo是属于Student类的方法
笔记:
栈中,e
堆,new Student(),引用栈中的e
方法在栈中运行,会动态的进站出站。
调用时进栈,用完出栈。

instanceof操作符

判断是否属于对象

案例

java">Person e = new Student();
		System.out.println(e instanceof Student);
		

返回的是true

object_171">object

object类是最高层的父类(你爸爸的爸爸的祖宗)

笔记:
object类是基(根)类,默认的继承类

子曰:学而时习之!


http://www.niftyadmin.cn/n/1707973.html

相关文章

linux复制文本一行数据库,linux mysql 数据库复制

一、主服务器配置1、配置文件my.cnf的修改[rootlocalhost mysql]# vim /etc/my.cnf#在[mysqld]中添加:server-id1log_binmaster-binlog_bin_indexmaster-bin.indexbinlog_do_dbtest#备注:#server-id 服务器唯一标识。#log_bin 启动MySQL二进制日志&#…

Java学习笔记11(强制类型转换+==+equals)

文章目录强制类型转换cast 和 equals 的异同String 对象的创建方式强制类型转换cast 案例笔记: 新建三个类 Person类 public class Person {public void test() {System.out.println("这是person的test");}}子类Student public class Student extend…

gradle_从Ant Build演进Gradle Build:导入Ant Build文件

gradle在大型项目上更改构建系统可能很困难并且需要大量工作。 幸运的是,对于那些将Ant版本迁移到Gradle版本的人,Gradle提供了特别方便的机制来促进这种迁移。 由于Gradle基于Groovy构建,并且Groovy通过AntBuilder包含内置的Ant支持&#xf…

linux下kegg注释软件,KEGG数据库-pathway对应基因的注释信息下载

KEGG数据库-pathway对应基因的注释信息下载KEGG数据库pathway相关数据下载我们下载KEGG数据库的目的是为了研究目标蛋白参与了那些pathway 。 前面我们介绍了KEGG 数据库中蛋白序列的下载方式,现在来介绍一下patyway 相关数据的下载方式。这个主要采用KEGG 的API进行…

Java学习笔记12(包装类+toString+关键字static+main方法+设计模式)

文章目录包装类toString关键字static单例 (Singleton)设计模式饿汉单例模式懒汉式main方法包装类 针对八种基本定义相应的引用类型—包装类(封装类) 应用: 字符串转换成基本数据类型 通过包装类的构造器实现: int i new Integ…

trident_Storm Trident拓扑中的错误处理

trident这篇文章总结了我在设计Storm Trident拓扑时当前的错误处理方法。 我在这里只关注代码设计,而不关注监督或冗余之类的部署良好实践。 由于Storm的实时流性质,当面对大多数错误时,我们最终将不得不移至下一个数据段。 在这种情况下&…

linux平台上备份win系统吗,windows、Linux/Unix及厂商OEM系统备份的对比

windows系统备份电脑在Windows下常用的Ghost类备份系统,需要DOS或者WinPE下操作(现在有很多一键GHOST的壳,所以,进入DOS或者PE不再是难点,也不需要用户有多少准备),缺点是,恢复的时候目标分区不能小于原始备…

junit5_在JUnit中测试预期的异常

junit5单元测试用于验证一段代码是否按照开发人员的预期运行。 有时,这意味着检查代码是否也会引发预期的异常。 JUnit是Java单元测试的标准,并提供了几种验证抛出异常的机制。 本文探讨了这些选项及其相对优点。以下面的简单代码段为例。 除了编写测试以…