day13、面向对象的三个修饰符

一、abstract关键字

1、 修饰:类 方法

抽象类:
抽象类不能实例化,他里面可以有抽象方法,也可以有普通的方法和全员属性
有抽象方法的一定是抽象类

抽象方法:
抽象没有方法体({}),小括号后带;,他是子类必须要实现重写的方法,除非子类也是抽象类

抽象方法,是一种约束,一种规范,规定了子类必须实现的方法及其参数

2、abstract关键字的使用总结
  • abstract修饰类:不能new对象,但可以声明引用。
  • abstract修饰方法:只能方法声明,没有方法实现。(需包含在抽象类中)
  • 抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
  • 子类继承抽象类后,必须重写父类中的所有的抽象方法,否则子类还是抽象类
3、抽象类和普通类的区别:
抽象类普通类
关键字abstract关键字不需要
构造方法抽象类不能被实例化普通类可以
成员方法可以是抽象的,也可以是普通的不能有抽象方法,只能是普通方法
成员变量都有都有
4.练习
public class Test {
	public static void main(String[] args) {		
		//对于抽象类,不能创建对象
		//Animal a = new Animal();
		Dog d = new Dog();
		//调用子类重写方法
		d.run();
	}
}

abstract class Animal {
	//只有声明, 没有实现,那么就是抽象方法。
	public abstract void run();
}

class Dog extends Animal {
	//重写抽象方法
	@Override
	public void run() {
		System.out.println("狗在跑");
	}
}

二、static

静态的。属于类,不再属于对象。不必创建对象,可以自接通过类名访问

1、修饰:变量和方法

静态属性static
类级别的static属性,是所有的对象都共享的,即1个对象改变,所有的对象都会受到影响

  • 1、static会作为对象之间的沟通

  • 2、静态常量,方便我们快速使用

  • 3、工具类,可以让我们方便快速的使用

注意,静态的属性方法,所消耗的资源较大,所以一般的变量或者方法不推荐使用

静态方法中:属于类
	可以访问静态的属性和静态的方法(属于类的),但是不能直接访问非静态的属性和非静态的方法(属于对象的)。
	
非静态方法中:属于对象
	全都行:静态的,非静态的都可以。this,super都可以。
类级别: 因为他是在类加载的时候就一起加载进去
		所有类的对象都可以使用

对象级:是在对象初始化的时候,被初始化,才能使用
	全员属性/实例变量/实例属性/全局变量
	范围:本类可以使用
    
局部变量:先初始化,才能使用
	代码块、if{}for{}

静态的运行顺序:
	父类的静态块==>子类静态块==>父类动态块/构造块==>父类的构造方法==>子类的动态块/构造块==>子类构造方法
2.总结
  • static修饰的成员为静态成员,无需创建对象,可直接通过类名访问

  • 静态方法不能直接访问非静态成员

  • 静态方法中不能使用this或super

  • 静态方法可以继承、不能重写、没有多态

  • 静态代码块在类加载时被执行,且只执行一次

三、final

“最终的,最后的”。

1、修饰:类、变量、方法
//final修饰变量:则为常量,只能赋值这一次。
	赋值之后,数值不能再修改了。
final修饰引用类型是内存地址不可变,如数组,可以使用num[0]=1下标的方式进行值得改变,因为值存储的空间就是同一内存地址
注意:String 虽然是引用类型,但在这里是属于值不可变
注意:我们的常量命名都是大写英文,如果是多个单词组成的使用下划线分割如:final String STUDENT_NAME = "haha";

//final修饰方法:最终方法  该方法不能被子类重写,可以继承

//final修饰类:最终则类不能被继承
2.实例常量
public class Test {

	public static void main(String[] args) {
		Student s = new Student();
	}
}

class Student {
	//实例常量不在通过默认值,必须手动赋予初始值
	//赋值时机:显示初始化、动态代码块、构造方法
	final String NAME;//="tom";
	{
		//name = "tom";
	}
	//构造方法中为实例常量,必须保证所有构造方法都能对其正确赋值
	public Student() {
		this.NAME = "tom";
	}
	public Student(String name) {
		this.NAME = "tom";
	}
}

四、总结

修饰符修饰对象语法规则
final变量变常量,数值不能再更改
final方法该方法不能被子类重写
final该类不能被继承
static属性(成员变量)表示类的属性,属于类,应该由类来调用(类名.属性名)
static方法表示类的方法,属于类,应该由类来调用(类名.方法名())
static代码块静态代码块,程序一加载的时候就执行,只执行1次
abstract方法抽象方法:只有方法的声明,没有方法体{}也没有,;结束
abstract方法构造方法,static方法,final方法不能是抽象的
abstract方法抽象方法所在的类,也必须是抽象的
abstract如果该类中,有抽象方法,那么类必须也是抽象的,不能实例化
abstract子类来继承,并实现抽象方法
abstract如果子类没有全部实现所有的抽象方法,那么子类也是抽象的

五、类加载

1、JVM在首次使用某个类时,需通过CLASSPATH查找改了的.class文件

2.将.class文件中对类的描述信息加载到内存中,进行保存

3.加载时机:

  • 创建对象
  • 创建子类对象
  • 访问静态属性
  • 调用静态方法
  • 主动加载:Class.forName(“全限定名”)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值