访问控制权限、抽象类~内部类

访问控制权限、抽象类~内部类

一、访问控制权限

1、访问控制权限修饰符

2、javaBean规范

属性要尽可能的私有化,但是要让它在其他类中可以访问值,需要提供相应的get方法和set方法。

3、static关键字

static是java中非常重要的关键字之一,其基本作用是:方便在没有创建对象的情况下来进行调用方法/变量。其用法主要有四种,分别是修饰属性(称之为静态变量或类变量),修饰方法,修饰代码块,静态导包。

static关键字的使用

 

①修饰属性

②修饰成员方法

③修饰代码块

④静态导包

含义

这个属性不再是对象的属性了,属于类的属性,是公有的资源,任何对象都可以访问

属于类的方法,而不是对象,可以直接使用类名.方法名进行调用

该代码块在加载期间就已经执行了,只执行一次,即在创建对象之前就已经执行了,一般用来加载静态资源

不太常用,采用static导入包后,在不与当前类的方法名冲突的情况下,可以直接采用方法名去调用类方法

存储位置

方法区(而正常属性存在于堆中)

方法区

 

 

实例:①   

上述实例中方法toSta( )用static修饰,直接用方法.toSta( )调用即可。


 当没有创建对象,直接使用类名调用static方法之前,static类成员就已经初始化了。当完成了类成员的初始化,static类成员没有再次初始化。

④将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。

final关键字的使

 

修饰属性

修饰方法

修饰方法参数

修饰类

含义

在java中,用final关键字修饰的变量,只能进行一次赋值操作,并且在生存期内不可以改变它的值。

用final关键字修饰方法,它表示该方法不能被覆盖。关于private和final关键字还有一点联系,这就是类中所有的private方法都隐式地指定为是final的,由于无法在类外使用private方法,所以也就无法覆盖它。

可以在方法的参数前面添加final关键字,它表示在整个方法中,我们不能改变参数的值。

用final关键字修饰类的作用,那就是用final修饰的类是无法被继承的。

4、final关键字

二、抽象类

1、概念

abstract修饰的类就是抽象类,不能被实例化,但存在构造器。方法可以没有方法体,但必须使用abstract修饰,叫抽象方法。

2、抽象类与类的区别

抽象类中可以有抽象方法和普通方法,可以有构造器和属性。类中不能有抽象方法。即有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法。

抽象类可以被继承,如果子类是一个普通的类,那么应该重写父类的抽象方法,写出{};如果子类是一个抽象类,则符合抽象类的特点即可。

三、接口:interface

是特殊的抽象类。特殊在:如果有方法,一定是抽象方法,abstract关键字可以省略;如果有属性,一定是常量,常量的修饰词:public static final(可以省略不写),常量的名字全都大写。没有构造器,不能实例化。

接口其实是一种协议、标准。

类、抽象类与接口的区别

 

抽象类

接口

定义

类是具有共同特征和共同行为的事务

用abstract修饰的类

特殊的抽象类,用interface声明

构造器

默认提供无参,手动提供后,默认无参失效

不能被实例化,但存在构造器

没有构造器,不能被实例化

属性

可以是任意类型

可以是任意类型

属性一定是常量,默认修饰词public static final

方法

可以是任意类型

可以有抽象方法和普通方法

不可以有普通方法,

继承

可以被继承

可以被继承:如果子类是普通方法,应该重写父类的抽象方法;如果子类是抽象方法,符合其特点即可

被实现,一个实现接口的类必须实现其所有方法,支持多继承

四、面向对象的三大特征

继承,封装,多态。

1、继承的好处:可以不用修改一个类,而利用继承的特点,扩展这个类,生成一个子类,有利于二次开发。

2、封装的好处:提高代码的重用性,减少代码的可见性,相对安全。

3、多态:包括对象的多态和变量的多态。

对象的多态:子类的对象被不同的父类型引用。即不同父类型的引用指向同一个对象。

变量的多态:(向上造型)父类型的变量指向不同子类的对象,方法相同行为不同。即同一个变量指向不同子类的对象。

4、向上造型:父类型的变量指向子类型的对象。

在编译期间,变量调用的方法是父类型中的。在运行期间,如果调用的方法子类中重写了,那么一定是重写后的;如果没重写,那么调用的是父类中的方法。

变量调用的属性:一定是父类型中的属性。

总结:属性是绑定到变量上,重写方法是动态绑定到对象上。

(属性看变量类型,方法看对象类型)

5、向下转型:将父类型的变量,转换成子类型的变量。

Aoo a = new Boo();

Boo b = (Boo)a;

有可能会出现ClassCastException,如:

Aoo a = new Coo();

Boo b = (Boo)a;

编译期间:javac.exe只检查代码的语法是否正确。为了避免这种情况发生,需要使用instanceof进行判断,判断变量所指的对象是不是同一类型。

上述代码改为:

Aoo a = new Coo();

if(a instanceof Boo){

      Boo b = (Boo)a;

五、内部类

1、定义:一个类内部定义的类型。

2、类型:静态内部类、成员内部类、局部内部类、匿名内部类。

内部类

成员内部类

局部内部类

静态内部类

匿名内部类

在一个类中直接定义的类

在方法中定义的内部类

在内部类的声明前面加static关键字

一种特殊的局部内部类,没有类名

内部类中有一个隐藏的引用指向外部类对象,可以访问外部类的所有属性和方法,而外部类不能直接访问内部类的成员,可以通过内部类对象访问。

与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块。其他用法和成员内部类相同。

不能访问外部类的非静态成员,这是由Java语法中"静态方法不能直接访问非静态成员"所限定。

匿名内部类是一种特殊的局部内部类,这种内部类没有类名。该类适用于只使用一次并且不需要多次创建对象的类。使用匿名内部类可以使类代码与创建对象同时完成,这样做不但方便,还提高代码的可维护性。

3、作用:①内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以。②内部类拥有外围类的所有元素的访问权限。③可是实现多重继承。④可以避免一个类继承父类实现接口中两种同名方法的调用。

六、API:(application programming interface)

应用程序编程接口,就是开发文档。

1、含有常用的API(),常用的包:java.lang包,java.util包:Scanner,java.math,日期Date,Canlender,java.net包,socket套接字等;java.io:输入输出流等。

2、注释三种:①文档注释:/** */一般写在类和方法前面,生成手册时;②多行注释:/* */;③单行注释://。

3、String类型

特点:类型是用final修饰的,底层是字符数组和其对数组的一些操作。创建出来的对象不可变。但是声明的变量可以指向不同的对象。在使用String类型,提供了字符串常量池。

常量池:在给字符串的变量赋值时,先去常量池中寻找这个对象,如果有,就把这个对象的地址信息给变量,如果找不到,就新建一个对象放进常量池里。有利于对象的重用性。这样的对象必须是字符串字面量,或者是字面量之间的拼接操作。字符串的字面量拼接是在编译期间拼接出结果。

猜你喜欢

转载自blog.csdn.net/mine_cun/article/details/79945800
今日推荐