面向对象(下)

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. java调用本机的命令 如ping、打开文本等

    最近接触到用java代码调用主机的命令部分感觉有点意思整理总结一下 环境jdk1.8  操作系统win10,不用引入其他的包jdk自带的api就可以 一.java调用ping命令 import jav ...

  2. vscode报错Already included file name ‘xxx‘ differs from file name ‘xxx‘ only in casing的解决方法:

    场景:我们创建了一个文件是小写开头的,又改成大写开头的. 比如: relationDemo.vue 改成 RelationDemo.vue 原因:缓存的判重逻辑是不区分大小写导致的.在这种情况下,vs ...

  3. Kubernetes: client-go 源码剖析(二)

    kubernetes:client-go 系列文章: Kubernetes: client-go 源码剖析(一) Kubernetes: client-go 源码剖析(二) 2.3 运行 inform ...

  4. Mathpix:屏幕截图 ➡ latex 公式,一键转换

    安利一天能免费使用 10 次且好用的工具 Mathpix.

  5. 在线photoshop网页版工具开发

    基于javascript开发的在线ps工具,打包方式webpack 在线预览 在线ps网页版 源码地址 https://github.com/geeeeeeeek 功能介绍 在线图像编辑器允许您使用H ...

  6. 问题--QT只有全屏的时候才能使用

    1.问题 安装的版本是3.8.0,只有在全屏的时候在编辑界面不会卡,其余情况会直接卡死在这. 2.解决方式 安装了较低版本的3.14.2,解决了上述问题

  7. MyBatis06——动态SQL

    动态SQL if choose (when, otherwise) trim (where, set) foreach 搭建环境 1.搭建数据库 CREATE TABLE `blog` ( `id` ...

  8. IL合集二

    引言 在第一篇关于IL的文章中,我们写了一些IL的相加,创建对象,循环以及实现TryCatch的一些功能,接下来,为大家带上后续关于IL的更新,其中包括,类型转换,以及条件判断,还有定义字段,定义属性 ...

  9. 通过宿主机查看K8S或者是容器内的Java程序的简单方法

    通过宿主机查看K8S或者是容器内的Java程序的简单方法 背景 最近一个项目的环境出现了 cannot create native process 的错误提示 出现这个错误提示时, docker ex ...

  10. [转帖]“炫技”还是“真硬核”,OpenPPL 实测阿里「倚天 710」芯片

    http://www.voycn.com/article/xuanjihaishizhenyingheopenppl-shicealiyitian-710-xinpian   本文将以深度学习模型推理 ...