面向对象

第二章:面向对象


面向对象的三大特点:封装、继承、多态。
 
封装:是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
封装的好处:将变化隔离、便于使用、提高重用性、提高安全性。
封装的原则:
将不需要对外提供的内容都隐藏起来;把属性都隐藏,提供公共方式对其访问。
 
构造函数:
对象一建立就会调用与之对应的构造函数;构造函数的作用是给对象进行初始化;一个类中如果没有定义构造函数,那么系统会自动创建一个空参数的构造函数;如果类中定义了构造函数那么默认的构造函数就没有了;对象一建立构造函数就会执行,且只执行一次。
构造代码块:
作用也是给对象进行初始化。与构造函数的区别:优先于构造函数执行;构造代码块是给所有对象进行统一初始化,而构造函数是给相对应的对象进行初始化。
 
This关键字:
This代表所在函数中所属的对象的引用。简单说,哪个对象在调用this所在的函数,this就代表哪个对象。
This的应用:当定义类中的函数时,该函数内部要调用该类的对象时,就用this来表示此对象。但凡本类函数内部使用到的本类对象,都用this表示。
This()语句:
1.用于构造函数之间进行互相调用 。
2.只能定义在构造函数的第一行,因为初始化要先执行。
 
Static关键字:
Static(静态)用于修饰成员(方法、变量);当成员被静态修饰后就多了一个调用方式,除了被对象调用外,还可以直接被类名调用:类名。静态成员   
String name;//实例变量
Static string name="lisi";//静态成员变量,类变量
实例变量与类变量的区别:
1.存放位置:类变量随着类的加载而存在内存的方法区中;实例变量随着对象的建立而存在于堆内存中。
2.生命周期:类变量的生命周期最长,随着类的消失而消失;实例变量的生命周期随着对象的消失而消失。
Static静态使用注意事项:
1.静态方法只能访问静态成员。非静态即可访问静态的也可访问非静态的。
2.静态方法中不可以定义this / super关键字。因为静态优先于对象存在。
 
单例设计模式:解决一个类在内存中只有一个对象。
单例模式-饿汉式举例:
class Stu
{
private int age;
 
private static final Stu s = new Stu();//在类本身内部建立一个对象
private Stu()//把构造函数私有化
{}
public static Stu getStu()//提供仅供访问
{
return s;
}
 
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
 
单例模式-懒汉式举例:
class Stu
{
private int age;
 
private static final Stu s = null;//在类本身内部建立一个对象
private Stu()//把构造函数私有化
{}
public static Stu getStu()//提供仅供访问
{
If(s==null)
s=new Stu();
return s;
}
 
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}
 
继承:extends
如果子类中出现了与父类相同的非私有同名成员变量时;子类访问本类同名成员变量用:this,子类访问父类同名成员变量用super。
函数的重写:当子类出现与父类一模一样的函数时,子类对象调用该函数时运行的是子类中的函数,如同父类中的函数被覆盖一样。
注:子类重写父类时子类的权限必须大于等于父类的权限;静态只能重写静态;构造函数不能重写。
子父类中的构造函数:
在对子类对象进行初始化时父类中的构造函数也会进行初始化,这是因为子类中的构造函数中默认第一行有一条隐式的super()语句,super()语句会访问父类中无参数的构造函数;而且子类中的所有构造函数第一行都有一条super()。
 
Final(最终)关键字:
1.用来修饰类、函数、变量;
2.Final修饰的类不可以被继承;
3.Final修饰的函数不可以被重写;
4.Final修饰的变量,值不可改变,即常量。
 
Abstract 抽象修饰符:
1.抽象方法一定在抽象类中;
2.抽象类不可以用NEW来创建对象。
3.抽象类中的函数要被使用必须由子类重写抽象类中的所有抽象函数后,建立子类对象进行调用。
 
接口:
1.格式:interface {}
2.接口中的成员修饰符是固定的;成员变量:public static final,成员函数:public abstract
3.接口是不可以创建对象的,因为函数是抽象的。
4.接口需要被子类实现(implement),子类必须把接口中的所有抽象函数进行重写后才能创建对象进行调用。
5.子类可能实现多个接口(java不支持多继承,通过多实现对多继承的一种转型)
6.接口与接口之间可以进行继承(extends),接口与接口可以多继承。
 
多态性:
1.多态的体现:
  父类的引用指向了自己子类的对象。
  父类的引用也可以接收自己子类的对象。
2.多态的前提:
  必须类与类之间有关系,继承(extends)或实现(implement),通常还有一个前提就是存在重写。
3.多态的好处:提高了程序的扩展性。
4.多态的弊端:父类的引用只能访问父类中的成员。
 
多态-转型:
例:
Class A{}
Calss B extends A{}
A a = new B();//父类的引用指向了子类对象,向上转型(提升)
B c = (B)a;//父类的引用a转型成子类,向下转型(强制转换)
转型注意事项:
1.不能将父类对象转型成子类类型。
2.父类引用指向了自己子类的对象时,该引用可以被提升,也可以被强制转换。
3.多态自始至终都是子类对象在做着转型变化。
 
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有被调用的函数。如果有编译通过,如果没有编译失败。
在运行时期:参阅对象所属类中是否有被调用的函数。
简单总结:成员函数在多态调用时,编译看左,运行看右。
 
在多态中成员变量的特点:
无论编译还是运行,都参阅左边(引用型变量所属的类)。
 
在多态中静态函数的特点:
无论编译还是运行,都参阅左边(引用型变量所属的类)。
 
内部类、嵌套类:
1.内部类可以直接访问外部类的成员,包括私有成员(static)
2.外部类要访问内部类成员必须要建立内部类对象。
3.内部类被static修饰后只能访问外部类中的static成员。
4.内部类中的成员是static时内部类也必须是staitc。
内部类定义在局部(如函数中等)时:
1.内部类不能被成员修饰符所修饰。
2.可以直接访问外部类中的成员,因为还持有外部类的引用;但是不可以访问它所在的局部中的变量,只能访问被final修饰的变量。
 
匿名内部类:
1.匿名内部类其实就是内部类的简写格式;
2.定义匿名内部类的前提:内部类必须是继承(extends)一个类或实现(implement)一个接口。
3.匿名内部类的格式:new 继承的类/实现的接口(){ 定义子类的内部 }
4.匿名内部类中定义的函数最好不要超过三个。
 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值