面向对象(下)

1. Instanceof

我们可以通过Instanceof关键词可以判断当前对象是否为某某类得父类

Object instanceof Student //true

注意:只有是两个类存在父子关系的时候,instanceof才会返回true

package pro;
import pro.Student; public class App {
public static void main(String[] args){
Object obj = new Student(); System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
}
}

如果比较两者之间没有一点联系的话在编译的时候就会报错

package pro;
import pro.Student; public class App {
public static void main(String[] args){
Object obj = new Student();
Student stu = new Student();
System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
System.out.println(stu instanceof String); //error
}
}

语法规则:X instance Y

  • 判断是否才父子关系返回true
  • X指向的子类型和Y有关系的也会返回true

2.static

static关键词修饰方法的时候我们称为静态方法

static关键词修饰属性的时候我们称为静态属性

区别:

  • 被static修饰的属性或者方法可以直接在main方法内部调用,也可以通过创建创建类的方法调用
  • 不被static修饰的属性或者方法只能通过创建类的方法调用
package pro;
import pro.Student; public class App {
static int num1 = 10;
int num2 = 103; static void run(){ } void running(){ }
public static void main(String[] args){
App ap = new App();
System.out.println(ap.num2); //true
System.out.println(ap.num1); //true num1 = 20; //true
num2 = 20; //error ap.running(); //true
ap.run(); //true run(); //true
running()//error }
}

3.匿名代码块

在Java中可以使用两个花括号来定义一个匿名代码块,如果使用static修饰匿名代码块,那么被修饰的匿名代码块就会在程序开始就创建且只执行一次

package pro;
import pro.Student; public class App { {
System.out.println("匿名代码块"); // 2
} static{
System.out.println("static"); // 1
} App(){
System.out.println("App"); // 3
}
public static void main(String[] args){
App ap1 = new App();
System.out.println("=======");
App ap2 = new App(); }
}

通过上面的代码我们可以得出,程序运行时,执行的顺序是

静态代码块 =>匿名代码块=>构造器

在第二次创建App对象ap2时,静态代码将不再执行

匿名代码块===>构造器

拓展:静态导入包

可以通过static来修饰类的方法,方便直接调用

package pro;
import static java.lang.Math.random; public class App {
public static void main(String[] args){
System.out.println(random());
}
}

拓展:final修饰类

如果一个类被final修饰,那么这个类就不能被继承了

3.抽象类

一个比类还抽象的抽象类

在Java中可以通过abstract关键词来修饰类,则类即为抽象类

如果absctrat关键词来修饰方法的话,那么方法为就是抽象方法

package pro;

public abstract class Worker {
public abstract void doSomething();
}

抽象方法:只有定义没有实现,具体的实现由子类来实现

注意:抽象化方法只能在抽象类中定义,子类方法继承抽象类的父类,必须实例化里面的抽象方法,除非子类也是抽象类方法

package pro;

public class Teacher extends Worker{

    public void doSomething(){

    }
}

不能new 一个抽象类,只能靠子类去实现它

但可以在new的过程中去实现抽象方法

抽象类是单继承

4.接口

普通类:只有具体实现

抽象类:具体事项和规范(抽象方法)都有

接口:只有规范!方法自己写

接口的本质的就是契约!!!

在创建一个Java文件中,可以通过interface去替换闯创建Java文件的class关键词,达到定义接口的效果

package pro;

public interface UserC {

}

接口里面的方法,都是public的抽象类方法

package pro;

public interface UserC {
void add(String temp);
void delete(int id);
void change(int id,String temp);
void search(String temp);
void search(int id);
}

对此可以创建一个类通过implements去继承我们的接口(必须去实现接口中函数的方法

package jk;

public class UserCImpl implements UserC{
public void add(String name){ }
public void change(int id,String temp){ }
public void delete(int id){ }
public void search(int id){ }
public void search(String name){ } }

接口不同于抽象类,接口可以实现多继承,可以创建以下接口

package jk;

public interface Time {
void timer();
}

通过前面的例子,通过都好分割实现多接口继承

package jk;

public class UserCImpl implements UserC,Time{
public void add(String name){ }
public void change(int id,String temp){ }
public void delete(int id){ }
public void search(int id){ }
public void search(String name){ }
public void timer(){ } }

总结

  • 约束

  • 定义一些方法,让不同的人实现

  • 在接口定义的属性,都是常量(一般不这么用)

  • 接口不能被实例化 接口中没有构造方法

  • 接口可以实现多个接口

    • 必须要重写接口的方法

5.Java内部类

在一个类的内部再写一个类就叫内部类

内部类


在Java中我们可以在一个类的内部在创建一个类,可以通过外部类方法去new一个外部类中的内部类

package outerClass;

import java.sql.SQLOutput;

//这是外部类
public class Outer { private int id = 10; public void say(){
System.out.println("这是外部类");
} //这是内部类
public class In{
public void main(){
System.out.println("这是内部类");
} public void getId(){
System.out.println(id); //id?
}
}
}

创建一个App的主方法去创建new一个In对象

package outerClass;

public class App {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.In in = outer.new In();
}
}

根据上例代码,我们发现为什么In这个类里面的getId方法这么写也不会报错?

内部类的一个很重要的属性:可以访问外部类私有的方法

静态内部类


在原有的内部类的情况下 通过static修饰,就叫静态外部类。

静态外部类不能访问私有的属性,除非是静态属性

(此处省略一亿八千三百六十五万三千零就是行)

局部内部类


在方法内部定义的类,称之为具备局部内部类

package outerClass;

public class App {
public static void main(String[] args) {
class app{
private int id = 0;
public void setId(int ids){
this.id = ids;
}
}
}
}

零基础入门学习JAVA课堂笔记 ——DAY07的更多相关文章

  1. 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...

  2. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  3. 《零基础入门学习Python》【第一版】视频课后答案第001讲

    测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...

  4. 零基础入门学习Python(1)--我和Python的第一次亲密接触

    前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...

  5. 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)

    093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  6. 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现

    088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...

  7. 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则

    080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...

  8. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  9. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  10. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

随机推荐

  1. NOIP2020游记——AFO之战

    阅读时请播放此音乐,这是我精心挑选的,很适合本文. Day-0奇遇 考试前一天,不顺,很不顺,简直可以写小说了.(不想看我车店可以往下翻,Day-1在后边) 我是下午两点从齐齐哈尔出发前往省会哈尔滨的 ...

  2. React报错之Property does not exist on type 'JSX.IntrinsicElements'

    正文从这开始~ 总览 当组件名称以小写字母开头时,会导致"Property does not exist on type 'JSX.IntrinsicElements'"错误.为了 ...

  3. 分享Go书籍-《Go Web编程》

    大家好,我是沙漠尽头的狼. 最近几天在看一本Go的书籍,看了100来页,感觉不错,分享给大家​.​ 书籍基本信息 书籍信息: 书名:Go Web编程 作 者:(新加坡)郑兆雄(Sau Sheong C ...

  4. 【linux】虚拟机 ubuntu 使用 sudo apt-get install 安装软件出现 “Unable to locate package xxx ”解决方法

    使用 sudo apt-get install 安装软件出现如下错误 上述错误表示找不到软件源,可更改软件源服务器解决 还有工具链 arm-none-eabi-gcc 实际安装的是 sudo apt ...

  5. Spring————IOC入门学习

    Spring----入门学习 简介 优点 Spring是一个开源的免费的框架(容器)! Spring是一个轻量级,非入侵式的框架 控制反转(IOC),面向切面编程(AOP) 支持对事务的处理,对框架整 ...

  6. Python Code_03数据类型

    数据类型 author : 写bug的盼盼 development time : 2021/8/27 19:59 变量定义 name = '阿哈' print(name) print('标识',id( ...

  7. [转帖]解决Java/MySQL性能问题的思路

    https://plantegg.github.io/2023/08/28/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98%E6%80%9D%E8%B7%AF/ 10年前写的 ...

  8. TiKV占用内存超过的解决过程

    TiKV占用内存超过的解决过程 背景 为了后去TiDB的极限数据. 晚上在每台服务器上面增加了多个TiKV的节点. 主要方式为: 每个NVME的硬盘增加两个TiKV的进程. 这样每个服务器两个磁盘, ...

  9. [转帖]auto_explain

    https://help.kingbase.com.cn/v8/development/sql-plsql/ref-extended-plug-in/auto_explain.html 6.1. 插件 ...

  10. [转帖]018 磁盘 IO 性能监控 / 压测工具 (sar、iotop、fio、iostat)

    https://my.oschina.net/u/3113381/blog/5465063   1 sar 命令查看当前磁盘 IO 读写 sar(System Activity Reporter 系统 ...