继承:子类使用extends来继承父类,子类可以有父类的内容,还可以有子类自己特有的内容

继承的好处:

  • 提高了代码的复用性(多个类相同的成员可以放到同一个类中)

  • 提高了代码的维护性(如果方法的代码需要修改,修改一处即可)

继承的弊端:

  • 继承让类的耦合性增强了,父类发生变化时,子类页发生变化,削弱子类的独立性

继承中变量访问特点:

  • 子类局部范围找
  • 子类成员范围找
  • 父类成员范围找
  • 都没有就报错
// 父类
public class Fu {
public int age = 30;
}
// 子类
public class Zi extends Fu{
public String name = "kkk";
public int age = 40;
public void show(){
// age = 50;
System.out.println(name+age);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
}
}

super关键字的用法和this关键字的用法相似:

  • this代表本类对象的引用
  • super代表父类存储空间的标识,可以理解为父类对象引用

父类构造方法不会被继承,构造方法是用来初始化对象的

构造方法前面是不能加void之类的返回值,加了就不是构造方法,系统会识别成普通方法

子类所有构造方法都会默认访问父类中无参的构造方法

子类会继承父类中的数据,还可能使用父类的数据,所有子类初始化之前会完成父类的初始化,每个子类构造方法的第一条语句默认都是super()

// 父类
public class Fu {
// 注意,这里的无参构造方法如果不写,那么子类不能直接super(),或者无法直接继承父类的无参构造方法
public Fu(){
System.out.println("父中无参构造方法被调用");
}
public Fu(int age){
System.out.println("父中带参构造方法被调用");
}
}
// 子类
public class Zi extends Fu{
public Zi(){
// super();
// 要么调用父类无参构造方法,要么调用父类带参构造方法
// 只能调用其中一个,多了会报错
super(30);
System.out.println("子中无参构造方法被调用");
}
public Zi(int age){
System.out.println("子中带参构造方法被调用");
}
}
// 测试类
public class Super_Demo {
public static void main(String[] args) {
Zi z1 = new Zi();
Zi z2 = new Zi(30);
}
}
// 结果
父中带参构造方法被调用
子中无参构造方法被调用
父中无参构造方法被调用
子中带参构造方法被调用

方法重写:子类中出现了和父类中一模一样的方法声明

@Override可以帮助检查方法重写

Java有四种访问权限

同一个类 同一个包 不同包的子类 不同包的非子类
Private
Protected
Public

方法重写的时候要注意,私有方法不能被重写,且子类方法访问权限不能更低,public>protected>默认>private

Java支持多层继承,但不支持多继承

包,其实就是文件夹,作用是对类进行分类管理,格式为

  • package 包名;
  • package 一级包.二级包;

要弄清楚四种访问权限的话,需要耐心把代码敲一遍

// 注意这里的包,demo1下有Fu、Zi、Demo三个Java文件
package demo1; public class Fu {
private void show1(){
System.out.println("private 方法可以被调用");
}
void show2(){
System.out.println("默认的方法可以被调用");
}
protected void show3(){
System.out.println("protected 方法可以被调用");
}
public void show4(){
System.out.println("public 方法可以被调用");
} public static void main(String[] args) { Fu d1 = new Fu();
d1.show1();
d1.show2();
d1.show3();
d1.show4();
}
}
// 这里的意思是同一个类下,四种访问权限的方法都可以访问
// 还是demo1的包,Zi继承Fu,现在不能调用private修饰的方法了
package demo1; public class Zi extends Fu{
public static void main(String[] args) {
Fu f = new Fu();
f.show2();
f.show3();
f.show4();
}
}
package demo1;

public class Demo {
public static void main(String[] args) {
Fu f = new Fu();
f.show4();
f.show3();
f.show2();
}
}
// 这里表示,只要是同一个包下,继承不继承,都是可以调用除private权限外的3种访问权限

现在到别的包下,看看访问权限

package demo2;

import demo1.Fu;

public class Zi extends Fu {
public static void main(String[] args) {
Zi z = new Zi();
z.show3();
z.show4(); Fu f = new Fu();
f.show4();
}
}
// 其他包下,继承关系,只能调用public和protected
// 没有关系的对象,只能调用public
package demo2;

import demo1.Fu;

public class Demo {
public static void main(String[] args) {
Fu f = new Fu();
f.show4();
}
}

这上面是黑马视频讲的内容,但是可能读者还有疑问,如果是不同包下,进行多层继承呢?也就是如果demo2下的包继承demo1中的Zi,又是什么情况呢?

package demo2;

import demo1.Zi;

public class zz extends Zi {
public static void main(String[] args) {
zz zz2 = new zz();
zz2.show3();
zz2.show4();
}
}
// 结果还是只有protected和public两种权限

修饰符final

final可以修饰成员方法,成员变量,类

final修饰的特点,对方法则不能被重写,对变量则不能被再次赋值,对类则不能被继承

对于变量,final修饰基本类型时数据值不能改变,修饰引用类型的地址值不能改变,但是地址里面的值可以改变

// java类
public class Student {
public int age;
public String name;
public void show(){
System.out.println(age+name);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
final int age = 20;
// final修饰基本数据类型,其值不能改变
// age = 30;
System.out.println(age);
final Student s = new Student();
s.age = 40;
s.show();
s.age = 50;
s.show();
}
}

static修饰符修饰成员方法、成员变量

static修饰的对象共享

// 学生类
public class Student {
public int age;
public String name;
public static String school;
public void show(){
System.out.println(name+", "+age+", "+school);
}
}
// 测试类
public class Demo {
public static void main(String[] args) {
Student s1 = new Student();
// Student.school = "浙江大学";
s1.age = 18;
s1.name = "林青霞";
s1.school = "浙江大学";
s1.show(); Student s2 = new Student();
s2.age = 28;
s2.name = "张曼玉";
s2.show();
s2.school = "华科";
s2.show();
s1.show();
}
}
林青霞, 18, 浙江大学
张曼玉, 28, 浙江大学
张曼玉, 28, 华科
林青霞, 18, 华科

static修饰的变量,推荐使用类名调用,也可以使用对象名调用

静态的只能调用静态的,非静态的都可以进行调用

public class Demo {
public String name;
public static String age; // 非静态
public void show1(){}
// 静态
public static void show2(){} // 非静态的都能调用
public void show3(){
System.out.println(name);
System.out.println(age);
show1();
show2();
} // 静态的只能调用静态的
public static void show4(){
System.out.println(name);
System.out.println(age);
show1();
show2();
} public static void main(String[] args) {
Demo de = new Demo();
de.show3();
de.show4();
}
}

Java学习笔记-基础语法Ⅲ的更多相关文章

  1. Java学习笔记-基础语法Ⅳ

    多态:同一个对象,在不同时刻表现出来的不同形态 例如: 猫 cat = new 猫(); 动物 animal = new 猫(); 这里的猫在不同时刻表现出来不同的形态,这就是多态 多态的前提和体现: ...

  2. Java学习笔记-基础语法

    Java基础包含关键字,标识符,注释,常量和变量,运算符 关键字 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有字母都为小写 Java的关键字 用于定义数据类型的关键 ...

  3. Java学习笔记-基础语法Ⅹ-进程线程

    学习快一个月了,现在学到了黑马Java教程的300集 打印流的特点: 只负责输出数据,不负责读取数据 有自己的特有方法 字节打印流:PrintStream,使用指定的文件名创建新的打印流 import ...

  4. Java学习笔记-基础语法Ⅷ-泛型、Map

    泛型 泛型本质上是参数化类型,也就是说所操作的数据类型被指定为一个参数,即将类型由原来的具体的类型参数化,然后在使用/调用时传入具体的类型,这种参数类型可以用在类.方法和接口中,分别为泛型类.泛型方法 ...

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

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

  6. JAVA 学习笔记 - 基础语法 2

    ---恢复内容开始--- 1.数组的申明和应用 数据类型 数组名称[] = null;             //在堆栈中申明变量名称 数组名称 =  new  数据类型[10];       // ...

  7. JAVA 学习笔记 - 基础语法1

    1. 类的定义 public class  与  class的区别 一个java文件只有一个public class, 而且类名必须与文件名一致. 一个java文件可以有多个class定义,javac ...

  8. Java学习笔记-基础语法ⅩⅠ-UDP、TCP

    网络编程 三要素:IP地址.端口.协议 IP地址:使用ipconfig查看,如果装了VM的话,会有VMnet1.VMnet8和WLAN,net1不能从虚拟机到主机,net8不能从主机到虚拟机,net0 ...

  9. Java学习笔记-基础语法Ⅸ-文件

    File File是文件和路径名的抽象表示,File封装的并不是一个真正存在的文件,是一个路径名,可以存在也可以不存在 常用方法: 创建文件:createNewFile() 创建目录:mkdir() ...

  10. Java学习笔记-基础语法Ⅶ-集合

    集合 集合类特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变 这里需要回顾一下,因为数组和字符串一旦创建,就不可改变,需要区分一下 import java.util.ArrayLi ...

随机推荐

  1. mac-brew

    brew search [TEXT|/REGEX/] 搜索软件 brew (info|home|options) [FORMULA...] 查询软件信息 brew install FORMULA... ...

  2. 转载:平衡二叉树(AVL Tree)

    平衡二叉树(AVL Tree) 转载至:https://www.cnblogs.com/jielongAI/p/9565776.html 在学习算法的过程中,二叉平衡树是一定会碰到的,这篇博文尽可能简 ...

  3. 文件缓存tmpfs + 数据缓存SSDB(一)

    一.文件缓存tmpfs 1.特性 1) 基于内存的文件系统,RAW+SWAP,虚拟内存 2) tmpfs使用虚拟内存,/dev/shm/使用共享内存 3) 访问速度快,可以动态调整大小 4) 没有持久 ...

  4. SpringDataJpa备忘录

    单向多对一关系 //产品类型 一的一方 @Entity public class ProductDir { @Id @GeneratedValue private Long id; private S ...

  5. 微信小程序 使用filter过滤器几种方式

    由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS View Filt ...

  6. JWT介绍及使用

    目录 JWT-JSON WEB TOKEN JWT组成 header payload signature JWT校验 JWT获取信息 JJWT(java jwt api)使用 导入依赖 测试代码 JW ...

  7. 使用 ssm 实现登录日志记录

    使用 ssm 实现登录日志记录 学习总结 一.基础准备 1. 实现效果 2. 数据表 2.1 登陆日志信息表 2.3 员工表 二.代码实现 1. SysLogLogin 实体类 2. LogAspec ...

  8. Blazor组件自做五 : 使用JS隔离封装Google地图

    Blazor组件自做五: 使用JS隔离封装Google地图 运行截图 演示地址 正式开始 1. 谷歌地图API 谷歌开发文档 开始学习 Maps JavaScript API 的最简单方法是查看一个简 ...

  9. Python知识结构

    Python知识结构(点我) 欢迎评论提修改意见

  10. redis的基础命令操作

    文章目录 前言 一.字符串类型 二.哈希类型 三.列表类型 四.集合类型 五.有序集合类型 六.通过命令 前言 redis的数据结构 redis存储的是key,value格式的数据,其中的key是字符 ...