Java面向对象3

final修饰符,final主要用法有以下四种:

一、用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时、构造方法或者初始化块中对它赋值;

二、用来修饰局部变量,表示在变量的生存期中它的值不能被改变

三、修饰方法,表示该方法无法被重写;

四、 修饰类,表示该类无法被继承。

Java抽象类:

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法、初始化块和构造方法和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

抽象方法:抽象方法只包含一个方法名,而没有方法体,使用abstract修饰。

 

Java接口:

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以

interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

接口的的定义

修饰符 public、abstract

接口有以下特性:

接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

接口中的方法都是公有的。

编译时自动为接口里定义的方法添加public abstract修饰符

Java接口里的成员变量只能是public static final共同修饰的,并且必须赋初值,可以不写public

static final,编译的时候会自动添加

接口的实现:当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。

接口的继承

一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。接口允许多继承

抽象类有接口的对比:

相同点:

都位于继承的顶端,用于被其他类实现或继承;

都不能直接实例化对象;

都包含抽象方法,其子类都必须覆写这些抽象方法;

区别:

抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性; 接口只能包含抽象

方法;

一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)

抽象类是这个事物中应该具备的内容, 继承体系是一种 is..a关系 ;接口是这个事物中的额外内

容,继承体系是一种 like..a关系

 instanceof 关键字

在 Java 中可以使用 instanceof 关键字判断一个对象是否为一个类(或接口、抽象类、父类)的实例。

语法格式如下: boolean result = obj instanceof Class;

其中,obj 是一个对象,Class 表示一个类或接口。当obj 是 class 类(或接口)的实例或者子类实例时,结果 result 返回 true,否则返回 false。

Java对象类型转换:

对象类型转换,是指存在继承关系的对象,不是任意类型的对象,分别是向上转型(upcasting)和向下转型(downcasting)。

向上转型:父类引用指向子类对象为向上转型。语法格式如下: fatherClass obj = new sonClass();

向下转型:与向上转型相反,子类对象指向父类引用为向下转型。语法格式如下:sonClass obj = (sonClass) fatherClass;

例子:

 

内部类:

在类 A 中定义类 B,那么类 B 就是内部类,也称为嵌套类,相对而言,类 A 就是外部类。

如果有多层嵌套,例如类 A 中有内部类 B,而类 B 中还有内部类 C,那么通常将最外层的类称为顶层类(或者顶级类)。

内部类的特点如下:

内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部

类的类名和$符号。

内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的

成员变量,无论是否为 private 的。

内部类声明成静态的,就不能随便访问外部类的成员变量,只能访问外部类的静态成员变量。

有关内部类的说明有如下几点:

外部类只有两种访问级别:public 和默认;内部类则有 4 种访问级别:public、protected、

private 和默认。

Java实例内部类

实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。

  1. 在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。
  2. 在外部类中不能直接访问内部类的成员,而必须通过内部类的实例去访问。
  3. 在实例内部类中不能定义 static 成员,除非同时使用 final 和 static 修饰。

Java静态内部类

静态内部类有如下特点:

  1. 在创建静态内部类的实例时,不需要创建外部类的实例。
  2. 静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,则需要通过外部类的实例去访问

Java局部内部类

局部内部类是指在一个方法(或代码块)中定义的内部类。

局部内部类有如下特点:

1. 局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static

修饰符修饰。

2. 局部内部类只在当前方法中有效。

3. 局部内部类中不能定义 static 成员。

4.在局部内部类中可以访问外部类的所有成员。

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值