黑马程序员_5_面向对象
------- android培训、java培训、期待与您交流! ----------
<1>封装的优点:1解决的安全问题。 2隐藏了实现。 3操作简单。
使用步骤:1使用private关键字修饰需要封装的属性。
class Person{
private int age;
private String name;
}
2 对外提供公共的get或者set方法设置以及获取私有成员的属性。
class Person{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
匿名对象,没有引用类型指向对象。如:new Person();
匿名对象的应用场景:1如果调用一个对象只有一次,2 还可以作为实参传递
<2>成员变量与局部变量的区别:
a从作用上的区别:成员变量作用用意描述一类事物的公共属性,而局部变量的作用是提供一个变量给方法内部使用。
b从定义上的区别:成员变量定义在类之内,方法之外,局部变量定义在方法之内
c从生命周期区别:成员变量随着对象的创建而存在,随着对象的消失而消亡。
d从初始化的区别:成员变量初始化有默认初始值,局部变量没有默认初始值,必须先初始化才能使用。
<3>构造函数:
构造函数的作用:给对应的对象初始化使用。
定义格式:修饰符 函数名就是类名(形参列表...){};
class Demo{
public Demo(){};
}
注意的细节:a构造函数没有返回值类型,函数名必须与类名一致。可以存在多个
b、如果一个类中没有显式的构造函数,jvm会给该类添加一个无参的构造函数,如果有,那么就不会给添加。
c、构造函数不是由我们调用的,是由jvm虚拟机自动调用,每创建一个对象,就会调用对应的构造函数一次。
<4>构造代码块:
作用:是给所以对象初始化。
格式:{
执行的代码...
}
<5>静态代码块:
特点:是在类加载时候就执行了。
格式:
Static{
执行的代码...
}
<6>this关键字
1、在java中允许存在同名的成员变量与局部变量,如果方法内部访问到同名的成员变量和局部变量时,那么默认情况是访问局部变量,<java采取就近原则机制>.
2、如果方法方法内部访问了同名的成员变量与局部变量,那么默认情况访问了局部变量,那么如果需要访问成员变量就需要使用this关键字。
this关键字代表的是当前所属函数的调用者对象。
作用:a可以通过this关键字指定访问同名的成名变量。
- class Demo{
- int age;
public void setAge(int age) {
this.age = age;//把局部变量赋值给成员变量
}
}
b可以在构造函数内部调用另外的构造函数初始化对象。
class Person{
int age;
String name;
int id;
public Person(int id,int age,String name){
this(id,age);//调用另外的构造函数给对象初始化
this.name=name;
}
public Person(int id,int age){
this.id=id;
this.age=age;
}
}
注意:1、如果在方法内部访问到变量时,该变量在方法内部不存在,只存在成员变量,那么jvm会在变量前面加上一个this关键字。
2、在构造函数中使用this关键字调用另外一个构造函数时,只能写在函数的第一个语句。
3、this关键字调用构造方法的时候不能出现互相调用。因为会进入死循环的状态,编译器会报错的。
二:面向对象第二大特征继承
1:描述了类与类之间的关系。
2:降低了类与类之间的重复代码。
继承使用的关键字extends,继承时需要注意的细节:
1:被继承的类称之为父类,继承的类称为子类。
2:子类并不能继承父类中所有的成员,所有的私有成员不能被继承,private修饰的成员。
3:构造函数不能被继承。
三:面向对象第三大特征多态
多态使用的前提:类与类之间必须要有关系,继承或者实现。
多态的弊端:虽然提高了程序的扩展性,但是只能使用父类引用指向父类成员。
1:当父类和子类具有相同的非静态成员变量,那么在多态下访问的是父类的成员变量。
2:当父类和子类具有相同的静态成员变量,那么在多态下访问的是父类的静态成员变量。
3:当父类和子类有相同的非静态方法(子类重写父类方法),访问的是子类的成员方法。
4:当父类和子类具有相同的静态方法,访问的是父类的静态方法。