访问修饰符

来源:互联网 发布:ubuntu 32位iso下载 编辑:程序博客网 时间:2024/05/22 10:38
访问修饰符protected
可以修饰属性和方法
本类、同包、子类可以访问

访问修饰符总结:
访问修饰符本类同包子类其他private√   默认(friendly)√√  protected√√√ public√√√√

private:只有本类可以访问
默认访问修饰符:只有在本类或同包下才可以访问
protected:在本类或同包或子类中可以访问
public:在任意范围都可以访问

方法重写:
方法重写的规则:
访问修饰符不能比父类更严格
在继承关系的子类中
重写的方法名、参数、返回值类型必须与父类相同
私有方法不能继承因而也无法重写
意义:实现多态

方法重写VS方法重载
 位置方法名参数表返回值访问修饰符方法重写子类相同相同相同不能比父类更严格方法重载同类相同不同无关无关

何时使用继承?
继承与真是世界类似
符合is-a关系的设计使用继承
继承是代码重用的一种方法
将子类都有的属性和行为放到父类中

抽象类:实例化没有意义
abstract把类和方法变为抽象的
Java中使用抽象类,限制实例化
abstract也可以用于方法——抽象方法
抽象方法没有方法体(public abstract void test(); )
抽象方法必须被定义在抽象类里
抽象方法必须在子类中被实现
如果子类不实现,子类必须是抽象类
public abstract void play(); //没有方法体



1.final用法:
类不希望再被其他类继承——可使用
使用final类(最终版的类) 例如:public final class Piano(){}
方法不希望被重写——可调用
使用final方法(最终版的方法)
属性值不希望被修改
使用final修饰属性(最终版的属性值) 例如:public final int a = 10;


2.static:
static可以用来修饰属性、方法和代码块
static修饰的属性和方法称为类属性(类变量)、类方法
父类和子类中都有static变量,初始化顺序:
1.父类static变量/代码块 初始化
2.子类static变量/代码块 初始化
3.父类构造方法
4.子类构造方法


类属性的使用方式:
1.对象.类属性
2.类名.类属性(推荐)
类属性与普通属性的区别
使用方式的区别:
类属性不需要创建对象就可以使用,普通属性必须要创建对象
类属性:类名.类属性 普通属性:对象名.属性
各自特点:
类属性:属于全局的,所有的对象共用一个属性值
普通属性:每个对象属性值是特定的,改变一个对象属性,另一个对象属性值不会发生变化

一个类加载顺序:
静态属性(类属性)——>静态代码块——>普通属性——>代码块——>构造函数

只要类被加载,无需创建对象,就会调用类中的静态内容
如果类有静态属性或代码块
类初始化顺序:
父类的类属性——>父类静态代码块——>子类的类属性——>子类静态代码块——>父类属性——>父类代码块——>父类构造——>子类属性——>子类代码块——>子类构造
静态方法:在不使用类中普通属性的前提下,才能使用
静态方法不能直接调用非静态方法,非静态方法可以直接调用静态方法
如果静态方法要调用非静态方法,必须要创建对象,通过对象.方法()来调用

3.object
所有类的超类
protected(Object)  clone()创建并返回此对象的一个副本boolean   equals(Object obj)指定其他某个对象是否与此对象"相等"String       toString()返回该对象的字符串表示Class<?>   getClass()返回此Object的运行时类int      hashCode()返回该对象的哈希码值void      notify()唤醒在此对象监视器上等待的单个线程void notifyAll()唤醒在此对象监视器上等待的所有线程void wait()在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待void wait(long timeout)在其他线程调用此对象的notify()方法或notifyAll()方,或者超过指定的时间量前,导致当前线程等待protected(void)  finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法void wait (long timeout,int nanos) 

4.程序中的多态
使用方法重载构造存在的问题频繁修改代码,代码可扩展性,可维护性差
使用多态优化设计
多态:
同一个引用类型,使用不同的实例而执行不同操作(父类引用子类对象的实现)
如何实在多态:
使用继承
子类重写父类方法
父类引用子类
多态的优点:
可替换性。多态对已存在的代码具有可替换性。
可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、 继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而来实现的。
灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
简化性。多态简单化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。

5.引用类型转换
向上转型(子类转父类):
父类引用子类
可见性:子类重写父类的方法
应用:多态
向下转型:
强制类型转换,父类强转为子类
应用:类型的还原
instanceof
判断一个对象是否属于一个类或者实现了一个接口
强制类型转换之前通过instanceof运算符检查对象的真实类型,可以避免类型转换异常,从而提高代码健壮性

多态中的成员访问特点:
A:成员变量
编译看左边,运行看左边
B:构造方法
子类的构造都会默认访问父类无参构造,对父类的数据进行初始化
C:成员方法
编译看左边,运行看右边
D:静态方法
编译看左边,运行看左边
原创粉丝点击