this 关键字

1、当 成员变量 名 和 局部变量 相同时,优先使用 局部变量,通过 this 使用 成员变量。

public class Test1 {public static void main(String[] args) {Person p = new Person("tom");System.out.println(p.name); //tom}
}
class Person{String name;public Person() {}public Person(String name) {this.name = name;}
}

2、this 用于 构造方法间的调用。
注:this 在构造方法 里 使用 时,必须 放在 第一句

public class Test2 {public static void main(String[] args) {Person2 p = new Person2();// 调用 类 的无参构造方法}
}class Person2{public Person2() {this(10);// 有参构造方法10System.out.println("无参构造方法");}public Person2(int age) {System.out.println("有参构造方法"+age);}
}

继承

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为。
继承的特点:1、使用 extends 关键字
2、相当于 子类 把 父类 的功能 复制了 一份
3、java 只支持 单继承
4、继承可以 传递 (爷爷 儿子 孙子 的关系)
5、不能 继承 父类 的 私有成员
6、继承 多 用于 功能 的 修改,子类 可以 拥有 父类 的 功能 的同时,进行 功能拓展
7、继承 是 is a 的关系,是子类和父类发生了强制的依赖关系–强耦合

public class Test3 {public static void main(String[] args) {Fu fu = new Fu();fu.show();System.out.println(fu.age);Zi zi = new Zi();zi.show();System.out.println(zi.age);
//      System.out.println(zi.sum); // error ,不可继承 父类private修饰的成员zi.play();System.out.println(zi.name);}
}class Yeye{String name;public void play() {System.out.println("下象棋");}
}class Fu extends Yeye{int age;private int sum;public void show() {System.out.println("show()...");}
}class Zi extends Fu{}
super 关键字

1、通过 super 关键字 可以 使用 父类 的 内容
2、super 代表 父类 的 一个 引用
3、在 构造方法中 调用 时,必须 放在 第一条 语句

方法重写(override)

存在 父类 与 子类 间 的,子类 定义 的 方法 与 父类 定义 的 方法 具有 相同 的 方法名、返回值类型、参数列表
1、继承 中 成员变量 的 使用
使用 父类 成员时,使用 super 进行 调用

public class Test4 {public static void main(String[] args) {Son s = new Son();s.show();}
}class Father{int count = 5;int sum = 30;
}class Son extends Father{int sum = 10;public void show() {int sum = 20;System.out.println(sum);// 20System.out.println(this.sum);// 10System.out.println(count);// 5System.out.println(super.count);// 5System.out.println(super.sum);// 30}
}

2、继承 中 成员方法 的 使用
注:当实现 方法重写 时,子类必须有 权限 重写 父类 的 方法 ,子类 重写方法 权限 >= 父类 方法 权限

public class Test5 {public static void main(String[] args) {Erzi erzi = new Erzi();erzi.eat(); // 吃素菜erzi.play();// 下象棋erzi.coding();// coding()...
//      erzi.study();// error,不能继承 private}
}class Baba{public void eat() {System.out.println("吃肉肉");}private void study() {System.out.println("study()...");}public void play() {System.out.println("下象棋");}
}class Erzi extends Baba{public void eat() {//      super.eat();System.out.println("吃素菜");}public void coding() {System.out.println("coding()...");}
}

2、继承 中 构造方法 的 使用
子类 在创建 时 ,会 自动 调用 父类 的 无参构造方法
在 构造方法 的 第一行,都有 一条默认 的语句 super()
父类 没有 无参构造 时,可以使用 super 调用 父类 其他 的 构造方法
注:在 构造方法 中 使用 super 时 ,必须 放在 第一条 语句

public class Test6 {public static void main(String[] args) {Sub s = new Sub();}
}class Babby{public Babby() {System.out.println("babay 无参 构造...");}public Babby(int age) {System.out.println("babby 有参构造"+age);}
}class Sub extends Babby{public Sub() {//      super();// 默认存在这条语句,调用 父类 的无参构造super(10);// 调用 父类 的 有参构造System.out.println("sub 无参构造...");}
}

static 关键字

static 是 java 中 的关键字,用于 修饰 成员 (成员变量 和 成员方法 ,不能 修饰 局部变量)
static 的 特点:1、static 能 修饰 成员变量 和 成员方法
2、static 是全局唯一的,全局共享
3、static 随 类的加载而加载,且优先于 对象加载
4、static 只加载一次,就一直存在,不再开辟 新的空间
5、static 可以直接 被 类名 调用
6、静态 只能 调用 静态,非静态 可以 随意 调用
7、static 不能 和 this 或者 super 共用,因为 有 static 时 可能还没有 对象

// 这个类 用来测试 静态static 入门案例
public class Test7_Static {public static void main(String[] args) {//2、静态资源 优先于对象加载StaticDemo.game(); //3、静态资源可以 直接 被 类名 调用StaticDemo demo = new StaticDemo();demo.show();System.out.println(demo.age);//4、全局共享,可以被多个对象共享demo.name = "jack";StaticDemo demo2 = new StaticDemo();System.out.println(demo2.name); // jackSystem.out.println(StaticDemo.name); //静态资源 建议 用 类名 访问}
}class StaticDemo{//1、static可以修饰成员变量、成员方法static String name;static public void game() {System.out.println("game()...");}int age;public void show() {System.out.println("show()...");}
}
静态 方法内存图

静态 只能 调用 静态(变量 或 方法),非 静态 可以 访问 静态或非静态
//测试 静态 的调用关系
// 总结:静态资源 只能 调用 静态资源,而普通资源 可以 随意 调用
public class Test8_Static2 {public static void main(String[] args) {StaticDemo2 s = new StaticDemo2();s.eat();s.coding();}
}class StaticDemo2{//提供普通资源int age;public void eat() {// 1、普通资源 可以调用 静态资源    yescoding();System.out.println(name);System.out.println("eat()...");}static String name;static public void coding() {// 2、静态资源  不可以  调用 普通资源  no
//      eat();  // error
//      System.out.println(age); //errorSystem.out.println("coding()...");}
}
静态代码块

在 成员位置(类内 方法外)随着 类 的 加载 而 加载,先于 对象 加载,并且 只被 加载一次,一般用于 项目 的初始化
static{…}

// 测试 静态代码块
public class Test9_StaticBlock {public static void main(String[] args) {StaticDemo3 s = new StaticDemo3();// 静态代码块 构造代码块 构造方法....StaticDemo3 s2 = new StaticDemo3();// 构造代码块 构造方法....StaticDemo3 s3 = new StaticDemo3();// 构造代码块  构造方法....}
}class StaticDemo3{// 位置:是 在类内 方法 外,// 是随着类的加载而加载,加载时机早于对象// 而且只会 被 加载 一次来提高 效率,用来 完成项目的启动 或者 加载资源static {System.out.println("静态代码块");}{System.out.println("构造代码块");}public StaticDemo3() {System.out.println("构造方法");}public void show() {{System.out.println("局部代码块");}}
}

java基础-day08-面向对象(三) this关键字、继承、static关键字相关推荐

  1. 小汤学编程之JAVA基础day08——面向对象(三):抽象类与接口

    一.抽象类 1.抽象类的由来      2.几点注意     3.语法规则 二.接口 1.定义方式      2.属性和方法 三.总结 一.抽象类 1.抽象类的由来 "用进废退", ...

  2. 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  3. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  4. 【Java基础】面向对象(三)

    [Java基础]面向对象(三) 一.多态 概念 引用类型转换 二.Object类 概述 常用方法 三.抽象类 抽象类与抽象方法的定义 注意事项 四.接口 概述 接口定义 含有抽象方法 含有默认方法和静 ...

  5. JAVA基础语法——面向对象思想

    Java基础语法 前言 一.面向对象思想 1.面向对象(OOP)概述 2.面向对象三大特性五大原则 二.类和对象 1.对象和类的概念 2.对象的特征 3.构造方法 3.This关键字 4.static ...

  6. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  7. Java基础篇--面向对象(Object Oriented)

    Java基础篇--面向对象(Object Oriented) 1. 面向对象概念 1.1 什么事面向对象 1.2 理解面向对象 1.3 面向对象的特点 1.4 面向对象开发设计特征 2. 类与对象 2 ...

  8. JAVA基础学习--面向对象

    JAVA基础学习–面向对象 1.面向对象与面向过程: 面向过程:就代表从头到位,每一步都需要我们来完成,例如洗衣服,首先收拾脏衣服.接上水.到洗衣液.搓.倒水.拧干.晾晒.每一步都需要我们来完成. 面 ...

  9. Java基础语法(三)——运算符

    文章目录 Java基础语法(三)--运算符 一.算术运算符 1.基本四则运算符 (1)练习 (2)注意事项 2.复合运算符 3.自增自减操作符 二.关系运算符 三.逻辑操作符 1.逻辑与&&a ...

  10. [博学谷学习记录] 超强总结,用心分享|JavaEE就业课-尊享无忧+Java基础语法|面向对象(1wk)

    学习笔记目录 目录 学习笔记目录 前言 一.变量 1. 关键字:被java赋予特殊含义的字符 2. 常量:不会发生改变的量(数据)​编辑 3. 变量:内存中的存储空间. 4. 类型转换 5. 算术运算 ...

最新文章

  1. spring中的BeanPostProcessor
  2. Windows 10 下的OpenVINO Pycharm+Anaconda开发环境配置
  3. 港湾命令行 配管理IP
  4. c#中WebBrowser控件的使用方法
  5. java冒泡排序找最大的值_(13)數組操作:遍歷、輸出最大值、冒泡排序、選擇排序,java已有的排序方法、折半查找...
  6. PHP:第五章——字符串输出函数
  7. android小米推送,Android集成小米推送
  8. 大数据与云计算概论简介
  9. 爬虫实战—豆瓣250榜单的爬取
  10. f5服务器维护,F5-LTM(服务器的负载均衡)网络结构和功能
  11. 明解c语言答案第八章,《明解C语言》第1章初识C语言练习题答案(最新整理)
  12. P1003 铺地毯 C++
  13. BuildPack:无需编写 Dockerfile,新一代的企业镜像打包工具
  14. 《今雨》孙溟㠭书画艺术
  15. LM75AD温度传感器的应用(1)
  16. php在html中无法解析json数据,json字符串无法解析的问题
  17. 13典藏AutoHotKey脚本让您生活更轻松
  18. webStrom 2018 激活破解(最新)
  19. 百度网盘青春版开始内测了
  20. 守护进程--day33

热门文章

  1. 【转】WinCE驱动开发问题精华集锦
  2. 嵌入式linux 从u盘启动,嵌入式 linux中dd命令[用于制作U盘启动盘的神奇的命令]
  3. C++项目实战-环境的搭建
  4. 美国次贷危机的演变过程
  5. kitty终端ranger预览图片
  6. [Swift]LeetCode611. 有效三角形的个数 | Valid Triangle Number
  7. 从数据开始:『安卓读书』8000 万下载量炼成记
  8. 输入圆半径计算圆周长、圆面积、圆球表面积,结果保留3位小数。 注意:输入的半径可能是整数,也可能是小数。
  9. FPGA笔试面试专题——时钟偏斜(skew)与抖动(Jitter)
  10. 高手支招 ASP+Access的安全隐患及对策(转)