面向对象中常见的关键字

this关键字(当前对象)

this可用来修饰属性,方法,构造器(构造方法)

  1. this 修饰属性和方法
    ①this理解为当前对象或当前正在创建的对象
    ②在类的方法中,可以使用“this.属性”或“this.方法”调用正在创建的对象的属性和方法,但通常都选择省略“this ."
    特殊的:当属性与构造器或方法形参同名时,用
    "this ."来表明是属性;

2.this调用构造器(重复的操作)
①格式 this(形参列表)调用本类中指定的其他构造器
②构造器中不能通过”this(形参列表)"调用自己
③若一个类中有n个构造器,则最多有n-1个构造器使用了(this(形参列表))来调用本类中的其他构造器
④规定:"this (形参列表)必须声明在当前构造器首行
⑤ 构造器内部最多只能声明一个"this(形参列表)"来调用其他构造器。

super关键字(父类的)

super 可以用来调用属性 ,方法,构造器

1.super :可以理解为父类的
2.super 可以用来调用属性 ,方法,构造器

3.super的使用
①可以在子类的方法或构造器中通过super.属性或super .方法的方式显式调用父类中声明的属性或方法;通常习惯省略super
②特别的:当子类和父类定义了同名的属性时,要想在子类中调用父类的属性,则必须使用super
③特别的:当子类重写了父类中的方法后,我们想调用父类中被重写的方法时,则必须显式的使用super.方法来调用父类中的方法;

4.super调用构造器
①可以在子类构造器中显式的使用“super(形参列表)的方式调用父类中声明的指定的构造器
②super(形参列表)的使用必须声明在子类构造器的首行
③我们在类的构造器中,针对this(形参列表)或super(形参列表)只能二选一;
④在子类构造器首行,没有显式的声明”this(形参列表)或super(形参列表),则默认调用的是父类中空参的构造器super();
⑤在类的多个构造器中,至少有一个类的构造器使用了super(形参列表),调用父类的构造器;
说明:为什么super(形参列表)或this(形参列表)调用语句只能作为构造器中的第一句?
无论通过哪个构造器,创建子类对象,需要保证先初始化父类
目的:当子类继承父类后,继承 父类中所有的属性和方法,因此子类有必要知道父类如何为对象进行初始化;

static 关键字(静态的)

static可以修饰属性、方法、代码块、内部类(主要修饰类的内部结构)

1.使用static来修饰属性:静态变量(类变量)
分类:静态变量Vs 非静态变量(实例变量)
①实例变量:当创建类的多个对象时,每个对象都独立的拥有一套类中的非静态属性;当修改其中一个对象的非静态属性时,不会导致其他对象中同样的属性值的修改;
②静态变量:创建多个对象时,多个对象共享同一个静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量是修改过了的;

2.static修饰属性(静态变量)
①静态变量随着类的加载而加载,可以通过“类名 . 静态变量”的方式进行调用;
②静态变量的加载早于对象的创建;
③由于类只加载一次,则静态变量在内存中也只存在一份,存在方法的静态域中;
④通过类只可以调用静态的属性和方法,对象可以调用静态的结构和非静态的结构;

3.static修饰方法(静态方法)
①随着类的加载而加载,可以通过“ 类. 静态方法”调用;
②静态方法中只能调用静态的方法和属性;(生命周期不同)
非静态的方法,既可以调用静态的方法和属性也可以调用非静态的方法和属性;
③在静态的方法内,不能使用this 、super 关键字;

4.开发中,如何确定一个属性是否要声明为static的
①属性是可被多个对象所共享的,不会随对象的不同而不同的
②类中的常量常常声明为static的
③操作静态属性的方法通常设置为static的
④工具类中的方法,习惯上声明为static的
例如:Arrays 、Math、Collections

关键字final(最终的)

final可以修饰 类、方法、变量(局部变量、成员变量)

1.final用来修饰一个类,则此类不可以被其他类所继承(比如:String类、System类、StringBuffer类)
2.final用来修饰方法,表明此方法不能被重写
3.final 用来修饰“变量” 此时的变量就称为是一个常量
①final来修饰属性:可以考虑的赋值位置
显式初始化、代码块中赋值、构造器中赋值(多个构造器问题,每个都要进行赋值)
②final修饰局部变量(形参):表明此形参是一个常量,当我们调用此方法时,给常量形参赋一个实参,一旦赋值后,只能使用不能再次修改;
③static final 用来修饰属性:全局常量;

abstract关键字(抽象的)

abstract可以用来修饰类、方法

1.abstract来修饰类(抽象类)
①此类不能实例化
②抽象类中一定有构造器,便于子类对象实例化时调用
③开发中,都会提供抽象类的子类让子类对象实例化,完成相关操作;

2.abstract修饰方法(抽象方法)
①抽象方法只有方法的声明没有方法体;
②包含抽象方法的类一定是抽象类;反之抽象类中可以没有抽象方法
③若子类没有重写了父类中所有的抽象方法,则此类也是一个抽象类,需要abstract来修饰;

3.使用abstract的注意点:
①abstract不能用来修饰属性、构造器等结构;
②abstract不能用来修饰私有方法,静态方法,final 的方法,final的类;

4.创建抽象类的匿名子类对象

menth(new AbstractTest() {//匿名子类的匿名对象
			@Override
			public void man() {
				System.out.println("how can i get in touch with you?");		
			} });
			AbstractTest p=	new AbstractTest(){//匿名子类对象
			@Override
			public void man() {
				System.out.println("oh");	
			}	
		};

interface关键字(接口)

1.接口使用interface来定义
2.Java中,接口和类是并列的两个结构;

3.如何定义接口,定义接口中的成员
①jdk 7及以前 ,只能定义全局常量和抽象方法
(1)全局常量:public static final int rat=0.03;//可以省略public static final不写
(2)抽象方法:public abstract void man(){ }
②jdk 8之后:除了可以定义全局常量和抽象方法外,还可以定义静态方法和默认方法;

4.接口中不能定义构造器,意味着接口不能实例化;
5.Java开发中,接口通过让类去实现(implements)的方式来使用;
6.Java类可以实现多个接口---->弥补了Java单继承的局限性;
格式:class AA extends BB implements CC,DD,EE{ }
7.接口和接口之间可以多继承
8.接口的使用体现多态性
9.接口实际上是一种规范
10.接口的应用;代理模式

jdk 8之后的新特性说明使用
①接口中定义的静态方法,只能通过接口调用
②通过实现类的对象可以调用接口中的默认方法;如果实现类重写了接口中的默认方法,调用时,调用的是重写以后的方法;
③如果子类(或实现类)继承的父类和实现的接口中声明了同名同参的默认方法,那么子类在没有重写的情况下,默认调用的是父类中同名同参数的方法(类优先原则)
④如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法,那么在实现类没有重写的情况下会报错;接口冲突
⑤调用接口
子类(或实现类)的方法中调用父类接口中的被重写的方法;
格式: 接口名. super. 方法;

关键字package(包)

1.为了更好的实现类的管理,提供包的概念
2.使用package 声明类或接口所属的包声明在源文件的首行
3.包属于标识符,遵循标识符的命名规则,规范(小写)“见名知意”
4.每 ‘.’ 一次就代表一层文件目录
补充:同一包下,不能命名同名的类和接口
不同包下可以命名同名的接口和类

关键字import(导入)

1.在源文件中显式的使用import结构,导入指定包下的类和接口
2.声明在包的声明与类的声明之间
3.若要导入多个结构,则并列写出即可
4.可以使用”XXX.* "的方式表示可以导入xxx包下的所有结构
5.如果使用的类或接口是“java. lang ”/”本包“包下定义的,则可以省略import结构
6.如果在源文件中,使用了不同包下的同名类,则必须至少有一个类需要以全类名的方式显示;
7.如果使用"XXX.*"的方式表明可以调用XXX包下的所有结构,但如果是使用XXX子包的类,则还需导入
8.import Static 导入指定类或接口中的静态结构;属性和方法

instanceof 关键字

1.问题引入:
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法,子类特有的属性和方法不能被调用;
如何才能调用子类特有的属性和方法?
向下转型:使用强制类型转换符

2.出现的问题
①可能出现 class Cast Exception的异常
3.解决(instanceof 使用)
①格式
a instanceof A :判断对象a是否是类A的实例//通俗来讲就是 a的内存结构中是否有类A的结构;必须有子夫类的关系
② 使用情景:为了避免在向下转型时出现 class Cast Exception的异常;在向下转型之前,先进行instanceof 的判断,一旦返回true 就进行向下转型,返回false 不进行向下转型;
说明:
如果 a instanceof A 返回true ,a instanceof B也返回true ,其中类B是类A的父类
向下转型常见问题
①编译时通过,运行时不通过

Person p3=new Woman();
Man m=(Man ) p3;

②正确写法;
编译时通过,运行也通过

Object obj =new Woman();//new Woman()中存在Person的结构
Person p=(Person) obj;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值