【JAVA】第三天

【JAVA】第三天

一、面向对象

1.static

  • 类变量:属于类,与类一起加载一次,在内存中只有一份,会被类的所有对象共享
  • 实例变量:属于对象,每个对象中都有一份

案例:

java 复制代码
public class Student {
    // 类变量
    static String name;
    // 实例变量(对象的变量)
    int age;
}
java 复制代码
public static void main(String[] args) {

	// 对象.类变量(不推荐)
	Student s1 = new Student();
	s1.name = "小红";
	Student s2 = new Student();
	s2.name = "小明";
	System.out.println(s1.name); // 小明
	
	// 类名.类变量(推荐)
	Student.name = "小亮";
	System.out.println(Student.name); // 小亮

	// 对象.实例变量
	s1.age = 23;
	s2.age = 18;
	System.out.println(s1.age+","+s1.name); // 23,小亮
	System.out.println(s2.age+","+s2.name); // 18,小亮
}
  • 类方法:有static修饰的成员方法,属于类
    类名.类方法 (推荐)
    对象名.类方法(不推荐)
  • 实例方法:无static修饰的成员方法,属于对象
    对象.实例方法

注意

(1)类方法中可以直接访问类的成员,不可以直接访问实例成员

(2)实例方法中既可以直接访问类成员,也可以直接访问实例成员

(3)实例方法中可以出现this关键字,类方法中不可以出现this关键字的

2.代码块

表格:

代码块 格式 说明
静态代码块 static { } 类加载时自动执行,只执行一次
实例代码块 { } 每次创建对象时,执行实例代码块,并在构造器前执行

二、继承

案例:

java 复制代码
public class B extends A{
}

注意:子类可以继承父类非私有的成员

三、权限修饰符

表格:

修饰符 本类里 同一个包中的类 子孙类 任意类
private
缺省
protected
public

四、方法重写

案例:

java 复制代码
public class A {
    public void pr1(){
        System.out.println("1");
    }
    public void pr2(int a, int b){
        System.out.println("11");
    }  
}
java 复制代码
public class B extends A{
    // 方法重写
    @Override // 安全,可读性好
    public void pr1(){
        System.out.println("2");
    }
}
java 复制代码
public static void main(String[] args) {
	B b =  new B(); 
	b.pr1(); // 2
	b.pr2(1, 2); // 11
}

注意

  • 默认情况下,子类全部构造器的第一行代码都是 super() ,它会调用父类的 无参数构造器
  • super(...)必须放在构造器的第一行,否则报错

五、多态

1.自动类型转换

(1)格式:

父类 变量名 = new 子类()
案例:

java 复制代码
People p = new Teacher();

2.强制类型转换

(2)格式:

子类 变量名 = (子类) 父类变量
案例:

java 复制代码
Teacher t = (Teacher)p;

注意

强转前,使用 instanceof 关键字,判断当前对象的真实类型,再进行强转。
例如:

java 复制代码
if(p instanceof Student) {
	Student s = (Student) p;
}else if(p instanceof Teacher){
	Teacher t = (Teacher) p;
}

六、final

可以修饰(类、方法、变量)

(1)修饰类:不能被继承

(2)修饰方法:不能被重写

(3)修饰变量:该变量只能被赋值一次
注意

使用了 static final 修饰的成员变量就被称为常量

七、抽象类

格式:

java 复制代码
修饰符 abstract class 类名{ 
	修饰符 abstract 返回值类型 方法名称(形参列表);
}

案例:

java 复制代码
public abstract class A {
	public abstract void test();
}

注意

抽象方法:必须 abstract 修饰,只有方法签名,不能有方法体

八、接口

格式:

java 复制代码
public interface 接口名 {
	// 成员变量(常量)
    // 成员方法(抽象方法)
}

修饰符 class 实现类 implements 接口1, 接口2{

}

案例:

java 复制代码
public interface A {
    // 成员变量(常量)
    String NAME = "小亮"; // 默认修饰 public static final
    // 成员方法(抽象方法)
    void test(); // 默认修饰 public abstract
}

public class B implements A {

}

JDK 8开始,接口新增了三种形式的方法

java 复制代码
public interface A {

     // 1、默认方法:必须使用default修饰
    default void test1(){
    }

    // 2、私有方法:必须使用private修饰。(JDK 9开始才支持的)
    private void test2(){
    }

     // 3、静态方法:必须使用static修饰,默认会被public修饰
     static void test3(){
     }
     
}

九、内部类

内部类案例:

java 复制代码
public class A{
	// 内部类
	public class B{
	}
}

静态内部类案例:

java 复制代码
public class A{
    // 静态内部类
    public static class B{
	}
}

静态内部类案例:鸡肋语法,不重要
匿名内部类案例:

java 复制代码
new A(){
	@Override
	public void B() {
	}
};

注意

匿名内部类通常作为一个参数传输给方法

十、枚举

格式:

java 复制代码
修饰符 enum 枚举类名{
	名称1 ,  名称2, ... ; 
}

案例:

java 复制代码
public enum A{
	X , Y , Z;
}

十一、泛类

1.泛型类

案例:

java 复制代码
public class A<E>{
}

2.泛型接口

案例:

java 复制代码
public interface A<E>{
}

3.泛型方法

案例:

java 复制代码
public static <T> void test(T t){  
}

注意
" ? " 代表一切类型
" ? extends A " 接收的类型必须是A或者其子类
" ? super A " 接收的类型必须是A或者其父类

泛型不支持基本数据类型,只能支持对象类型

相关推荐
秋野酱2 分钟前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
安的列斯凯奇30 分钟前
SpringBoot篇 单元测试 理论篇
spring boot·后端·单元测试
Bunny021235 分钟前
SpringMVC笔记
java·redis·笔记
架构文摘JGWZ1 小时前
FastJson很快,有什么用?
后端·学习
BinaryBardC1 小时前
Swift语言的网络编程
开发语言·后端·golang
feng_blog66881 小时前
【docker-1】快速入门docker
java·docker·eureka
code_shenbing1 小时前
基于 WPF 平台使用纯 C# 制作流体动画
开发语言·c#·wpf
邓熙榆1 小时前
Haskell语言的正则表达式
开发语言·后端·golang
ac-er88882 小时前
Yii框架中的队列:如何实现异步操作
android·开发语言·php
马船长2 小时前
青少年CTF练习平台 PHP的后门
开发语言·php