您的位置:首页 > 编程语言 > Java开发

java面向对象三大特性

2014-02-06 13:49 253 查看
面向对象的三大特性:封装,继承,多态

1.封装
1.为什么要封装?
保证数据的安全性,有些数据在java语法上没有问题,但是不符合实际.
2.什么是封装?
就是把对象的属性或方法隐藏起来,不允许外部直接访问,而是通过类提供的方法来实现对类内部的信息进行操作和访问.
1.操作set
2.访问get
3.如何进行封装?
private 
1.set方法的定义:
String name;
[修饰符(public)] void setName(String name){
this.name=name;

2.get方法的定义:
[修饰符(public)] 返回值类型(属性的类型) getName(){
return name(属性名);
}
数据类型:1.基本类型2.引用类型
4.如何使用封装后的属性?
1.为属性赋值
对象.setName("wr");
2.获取属性值
属性的类型 变量=对象.getName();

=========================================================================

访问控制符(面试)
访问控制权限:
4种:private <default <protected <public
从小到大:
private <default <protected <public
作用范围:
private(当前类访问权限):只是在当前类中有效.
default(包访问权限):只能在当前包中被其他类访问.
protected(子类访问权限):既可以被本包中中的其他类进行访问,也可以被不同包的子类进行访问.
package a;
public class Fu{
protected String name;
}
package b;
import a.Fu;
public class  Son extends Fu{
public Son(){
super.name;
}
}
public(公开访问权限):没有任何权限
修饰范围:
private:属性,方法,构造方法
注:不可以修饰类
default:属性,方法,构造方法,类
protected:属性,方法,构造方法  注:不可以修饰类
public:属性,方法,构造方法,类

========================================================================

继承:
特点:单继承,每个子类只有一个直接的父类.
extends关键字来实现,
语法:
[修饰符] class SubClass extends SuperClass{
}
extends 扩展
子类中可以定义父类中没有定义的属性或方法.子类对父类是一种扩展.
子类是一种特殊的父类.
注意:子类要重写(覆盖)父类的属性或方法:
重写(覆盖):
概念:子类和父类中有方法同名的现象.
对于方法的重写要遵循一定的规则:
1.5以后的jdk:
"两同两小一大"
两同:1.方法名相同2.参数列表相同
两小:1.返回值类型相同或更小 2.异常相同或更小
一大:访问权限比父类相同或更大
====================================================================
总结:重载和覆盖的区别?(面试题)
* 重载 OverLoad 
要求:方法名称一样,参数列表不同(个数不同,类型不同,顺序不同),返回值不要求
注意:形参名字不同,不构成重载的语法
好处: System.out.println("");
System.out.println(11);
System.out.println('c');
System.out.println(true);
屏蔽掉用户的使用差异
*覆盖的语法 OverRide  扩展
1 发生在父子类中
2 子类对父类中的方法,提出一个特殊的实现
   要求  
1 名称一样
2 返回值一样
3 参数列表一样
4 修饰符权限 子类比父类宽,或有一样
====================================================================
创建一个子类对象:
new 子类构造方法(实参);
过程:
1.分配空间(子类,父类)
2.初始化父类对象(先初始化父类属性,在调用父类的构造方法)
3.初始化本类属性
4.调用本类的构造方法
====================================================================
super限定
1.super. 用来调用父类的属性和普通方法
2.super(实参) 用来调用父类的构造方法
注意:1.必须放在子类构造方法的第一行
2.this(实参),super(实参)不能同时在一个子类构造方法中使用
子类构造方法调用父类构造方法有以下三种情况:
1.子类构造方法中既没有this,也没有super,系统会在执行子类的构造方法前隐式的调用父类无参的构造方法
2.子类构造方法的第一行有super显示调用父类的构造方法,系统会根据super(实参)调用父类里的相应的构造方法
3.子类构造方法中第一行出现this(实参),先去调用本类中其他的构造方法,再去调用父类的构造方法.
=====================================================================
总结:super和this区别?(面试题)
*super关键字
1 super.   引用类型,父类对象  super.方法和属性
父子类关系中,没有重名情况下,访问父类属性和方法时,默认前面加super.
父类的属性被遮盖,或者父类的方法被覆盖的情况下,访问父类对象的属性和方法,必须使用super.
2 super();出现在构造方法第一行,用来告知虚拟机创建父类对象时,使用父类的哪一个构造方法,默认调用无参构造方法super();
* this
this的两种用法
a this 引用类型 当前对象 当前正在调用方法的对象,在类的内部默认属性方法的使用都是加this的,所有可以省略不写
必须加this的情况:局部变量和实例变量重名的情况下this.name指代实例变量
b this();this(""); this("",19);
出现在构造方法的第一句,用来在创建对象时调用本类其他构造方法
注意不要递归调用构造方法 ,即死循环
public A(){
this("");
}
public A(String s){
this();
}
//ERROR

多态:
概念:父类引用指向一个子类的对象
语法: Animal a = new Dog();  父类引用指向子类对象
引用类型 实际对象
主观类型

1 一旦有new关键字出现 ,对象的实际类型不会发生改变
2 编译时看主观类型,看引用类型,编译时多态,拿到得是Animal引用,只能找到Animal里面有的方法
3 运行时能否成功,看实际类型,运行时多态,实际运行过程中,调用子类中覆盖后的方法
作用:
1 屏蔽子类间的差异(应用在参数表,和返回值)
2 子类统一调用的效果

//不是符合多态语法要求
Animal a = new Animal();
Dog d = new Dog();

Animal a = ...... Dog Cat Tiger...
Cat c = (Cat)a;//有可能成功 

避免类型转换异常
关键字 instanceof
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: