面向对象(下)

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. UNI-APP 使用Echart

    UNI-APP 使用Echart(含地图教程) https://blog.csdn.net/weixin_43548442/article/details/121468189 uniapp使用echa ...

  2. python常见面试题讲解(九)字符个数统计

    题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里.不在范围内的不作统计.注意是不同的字符 输入描述: 输入N个字符,字符在 ...

  3. 【TouchGFX】实测工程所在路径深度不可超过10级(10级有效)

    实测环境 win10 64bit touchgfx designer 4.13.0

  4. [转帖]Oracle与防火墙

    https://www.laoxiong.net/oracle_and_firewall.html 老熊 Oracle数据库管理 2009-04-20 最近有两次Oracle数据库故障与防火墙有关.这 ...

  5. [转帖]MySQL: Convert decimal to binary

    Last Update:2018-12-05 Source: Internet  Author: User Tags decimal to binary mysql code Developer on ...

  6. [转帖]Linux中find命令使用示例

    https://zhuanlan.zhihu.com/p/99170116 Linux查找命令是类Unix操作系统中最重要且最常用的命令行实用程序之一. 查找命令可以根据你设定的参数匹配的文件指定的条 ...

  7. [转帖]程序运行崩溃(segfault)的排查方法

    这篇博文记录的非常详细:https://blog.csdn.net/zhaohaijie600/article/details/45246569 我的笔记: 写的C++程序老是运行两三天就挂了,关键是 ...

  8. [转帖]CPU结构对Redis性能的影响

    文章系转载,便于分类和归纳,源文地址:https://wangkai.blog.csdn.net/article/details/111571446 CPU的多核架构和多CPU架构都会影响到Redis ...

  9. [转帖]20191022-从Jenkins NativeOOM到Java8内存

    我把老掉牙的Jenkins升级了,它跑了几天好好的:后来我有一个python脚本使用JenkinsAPI 0.3.9每隔2.5分钟发送约300余get请求,结果过了3天,它就挂了:当我开两个脚本时,4 ...

  10. 数据结构与算法 第一章(48课时课程笔记)Data Structure and Algorithms

    数据结构基础知识 数据(Data):是对信息的一种符号表示.在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称.数据元素(Data Element):是数据的基本单位,在计算机程序中 ...