三个修饰符

一、引言


1.1 什么是抽象

似是而非的,像却又不是;具备某种对象的特征,但不完整。

二、abstract


2.1 生活中的抽象

|                         || :---------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J8y8BLC5-1631542921220)(Pictures\抽象2.PNG)] |

2.2 不该被创建的对象

|                         || :---------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DGn2LeK5-1631542921222)(Pictures\抽象3.PNG)] |

  • 程序是用来模拟现实世界、解决现实问题的;
  • 现实世界中存在的都是“动物”具体的子类对象,并不存在“动物”对象,所以,Animal不应该被独立创建成对象。

如何限制这种对象的创建?

三、抽象类、抽象方法【重点


3.1 抽象类

应用:abstract修饰类,此类不能new对象。

|                         || :---------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8cD5aeIk-1631542921224)(Pictures\抽象4.PNG)] |

  • 被abstract修饰的类,称为抽象类。
  • 抽象类意为不够完整的类、不够具体的类,
  • 抽象类对象无法独立存在,即不能new对象。
3.2 抽象类的作用

|                         || :---------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-saPbUq4A-1631542921225)(Pictures\抽象5.PNG)] |

  • 作用:
  • 可被子类继承,提供共性属性和方法。
  • 可声明为引用,更自然的使用多态。
  • 经验:
  • 抽象父类,可作为子类的组成部分。
  • 依附于子类对象存在。
  • 由父类共性+子类独有组成完整的子类对象。
3.3 不该被实现的方法

需求:

  • Dog中的eat()应输出“狗在吃骨头”。
  • Cat中的eat()应输出“猫在吃鱼”。

|                         || ----------------------- || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2q4Dliv-1631542921226)(Pictures\抽象6.PNG)] |

方法声明必要,方法实现多余。

3.4 抽象方法

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eFI1ozUL-1631542921227)(Pictures\抽象方法.PNG)] |

public class TestAnimal {
	public static void main(String[] args) {
		//Animal animal=new Animal();
		Animal dog=new Dog();
		Animal cat=new Cat();
		
		dog.eat();
		cat.eat();

	}
}

//动物类
abstract class Animal {
	
	String breed;//品种
	int age;//年龄
	String sex;//性别
	
	//吃(抽象方法)
	public abstract void eat();
	//睡
	public void sleep() {
		System.out.println("动物睡...");
	}
}

//狗狗类
class Dog extends Animal{
	@Override
	public void eat() {
		System.out.println("狗在吃骨头");
	}
}

//猫咪类
class Cat extends Animal{
	@Override
	public void eat() {
		System.out.println("猫在吃鱼");
	}
}

四、静态属性


4.1 实例属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a62EjcaK-1631542921228)(Pictures\实例属性.PNG)]

实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。

4.2 静态属性

静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象。

4.3 什么是静态

概念:

  • 静态(static)可以修饰属性和方法。
  • 称为静态属性(类属性)、静态方法(类方法)。
  • 静态成员是全类所有对象共享的成员。
  • 在全类中只有一份,不因创建多个对象而产生多份。
  • 不必创建对象,可直接通过类名访问。
4.4 课堂案例

练习:统计一个类的对象被创建过多少次?

public class TestTeacher {
	public static void main(String[] args) {
		System.out.println("对象创建之前次数:"+Teacher.count);
		Teacher t1=new Teacher();
		Teacher t2=new Teacher();
		Teacher t3=new Teacher();
		System.out.println("对象创建之后次数:"+Teacher.count);
	}
}
//老师类
class Teacher {
	//姓名
	String name;
	//年龄
	int age;
	//工资
	double salary;
	//保存对象创建的次数
	static int count=0;
	
	public Teacher() {
		//count
		count++;
	}
	
	public void show() {
		System.out.println(name+"---"+age+"---"+salary);
	}
}

五、静态方法、类加载


5.1 静态方法

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSC3ajMx-1631542921229)(Pictures\静态方法.PNG)] |

5.2 静态的特点
  • 静态方法允许直接访问静态成员。
  • 静态方法不能直接访问非静态成员。
  • 静态方法中不允许使用this或是super关键字。
  • 静态方法可以继承,不能重写、没有多态。
5.3 动态代码块

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YrYjUOcy-1631542921230)(Pictures\动态代码块.PNG)] |

运行结果:
实例属性
动态代码块
构造方法

5.4 类加载

JVM首次使用某个类时,需通过CLASSPATH查找该类的.class文件。

  • 将.class文件中对类的描述信息加载到内存中,进行保存。
  • 如:包名、类名、父类、属性、方法、构造方法…
  • 加载时机:
  • 创建对象。
  • 创建子类对象。
  • 访问静态属性。
  • 调用静态方法。
  • 主动加载:Class.forName(“全限定名”);
5.4 静态代码块

|                              || :--------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-36tdG0v9-1631542921230)(Pictures\动态代码块.PNG)] |

运行结果:
静态属性

注:方法只有被调用才会执行。

六、final


6.1 什么是最终

概念:最后的,不可更改的。

  • final可修饰的内容:
  • 类(最终类)
  • 方法(最终方法)
  • 变量(最终变量)
6.2 final类
  • final修饰类:此类不能被继承。
  • String、Math、System均为final修饰的类,不能被继承。
  • final修饰方法:此方法不能被覆盖。
  • 意为最终方法,不支持子类以覆盖的形式修改。
6.3 final变量

final修饰变量:此变量值不能被改变(常量)。

在这里插入图片描述

所有final修饰的变量只能赋值一次,值不允许改变。

6.4 实例常量

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jnx9KG4O-1631542921232)(Pictures\实例常量.PNG)] |

  • 实例常量不再提供默认值,必须手动赋予初始值。
  • 赋值时机:显示初始化、动态代码块、构造方法。
  • 注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。
6.5 静态常量

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nE1g9cAP-1631542921232)(Pictures\静态常量.PNG)] |

  • 静态常量不再提供默认值,必须手动赋予初始值。
  • 赋值时机:显示初始化、静态代码块。
6.6 对象常量

|                            || :------------------------: || [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-APXlnp5y-1631542921233)(Pictures\对象常量.PNG)] |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值