面向对象知识总结

面象对象编程OOP(ObjectOrientedProgramming)

所有的事物都有两个方面:

有什么(属性):用来描述对象。

能够做什么(方法):告诉外界对象有那些功能。

后者以前者为基础。对象的属性也可以是一个对象。

面象对象三大特征:封装,继承,多态.

匿名对象:Carc=newCar();

c.num=5;

上面等同于:newCar().num=5;

匿名对象调用对象的属性没意义.经常用匿名来调用方法.

什么时候使用匿名对象?

1.当对对象的方法只调用一次时可以用匿名对象来完成,这样写比较简化.但如果进行多个成员调用就必须给这个对象起个名字.

2.可以将匿名对象作为实际参数进行传递.

main()

{

show(newCar());

}

publicstaticvoidshow(Carc)

{

c.num=5;

c.run();

}

封装:是指隐藏对象的属性和实现细节,对外仅提供公共访问方式.

好处:将变化隔离.便于使用.提高复用性.提高安全性.

封装原则:将不需要对外提供的内容隐藏起来,把属性都隐藏,仅对处提供公共方法对其访问.封装属性用private来修饰.封装后要提供外部对其访问的接口.之所以提供访问方式.就因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性.

构造函数什么时候定义呢?

当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中.

面试时候会用到.构造代码块,作用:给对象初始化,对象一建立就运行.而且先去构造函数.构造代码块是给所有对象进行统一初始化.定义一些对象共性初始化内容.

 

this关键字,用于区分局部变量和成员变量同名的情况.前面加上this就代表本类的对象.它代表它所在函数所属对象的引用.和this相对的是super他对应父类的

this的应用.当定义中的功能时,该函数内部要用到调用该函数的对象时.用this来表示这个对象,只要是本类功能内部使用了本类对象,都可以用this来表示.

this语句构造函数间调用.

public class ConstructorTransfer{

public static void main(String[]args){

//调用Person(String name,int age){}

Personp=newPerson("lisi",20);

}

class Person{

private String name;

private int age;

Person(){

}

Person(String name){

//调用Person(){}

this();

}

Person(String name,int age){

//调用Person(String name){}

this(name);

this.age=age;

}

}

this语句只能定义在构造函数第一行.

Static关键字.

静态方法只可以访问静态成员.

因为静态优先于对象存在,所以静态中不可以出来this和super关键字.

在什么时候定义静态函数呢?

当功能没有访问到对象的非静态数据(对象的特有数据)时,那么该功能可以定义为静态,静态函数也只能访问静态成员.

给主函数传递参数

静态的应用——工具类

工具类中每一个方法都没有用到对象中的特有数据,可以将方法名都定义成静态的通过类名调用,为了更为严谨,强制让该类不能建立对象,可以通过构造函数私有化.

 

静态代码块特点:随着类的加载而执行,只执行一次,并先于主函数执行.用于给类进行初始化的.

static

{

syso(“这是静态代码块”);

}

 

{

syso(“这是构造代码块,用来给所有对象统一初始化的.”);

}

public class MainDemo{

/**

*@paramargs

*/

public static void main(String[]args){

//TODOAuto-generatedmethodstub

System.out.println(args.length);

System.out.println(args[0]);

}

}

用上面的类在Myeclipse中RunAs-à RunConfigurations..里边的Arguments中传递参数

Test1

Test2

Test3

运行上面的程序输出的结果为:

3

Test1

上面的在命令行窗口也可以执行,直接在java类名后面加上空格和要加的参数,参数之间用空格隔开.

用Javadoc制作帮助文档.

/**

@param这是显示参数的

@return这是显示返回值的.

*/

单例设计模式:分为懒汉式和饿汉式

开发中常用饿汉式,面试经常会考懒汉式.

饿汉式对象建立时就初始化.

//饿汉式

class SingleE{

private SingleE(){}

private static SingleE s1=new SingleE();

public static SingleEget Instance(){

return s1;

}

}

//懒汉式为了保证安全同步代码块.

class SingleLan{

private static SingleLan s2=null;

private SingleLan(){}

public static SingleLan getInstatce(){

if(s2==null){

//同步使用的锁是该类的字节码文件.

synchronized(SingleLan.class){

if(s2==null)

s2=new SingleLan();

}

}

returns2;

}

}

面象对象,继承

把对象中的共性描述提取出来单独封装成一个类,然后让对象所属的类extends这个封装的类.

继承提高了代码的复用性,让类与类之间产生关系,有了这个关系才有了对象的多态性.

必须是类与类之间有所属关系才可以继承,不能单独的为了实现某功能而继承.所属关系isa

Java是单继承多实现,支持多层继承.

继承查阅父类功能,创建子类对象使用该功能.

当之类继承父类,沿袭了父类的功能到子类中,但子类的该功能和父类的不一致时没有必要定义新功能,而是使用覆盖(Override),保留父类的功能定义,并重写功能内容.

Override时要保证子类的权限不能比父类的权限小.

在对子类对象进行初始化是地,父类的构造函数也会运行,因为子类的构造函数默认第一行都有一条隐式的语句super());

super():会访问父类中空参数的构造函数.而且中所有的构造函数默认第一行都是super());

为什么子类一定要访问父类中的构造函数.?

因为父类中的数据子类可以直接获取,所以子类建立对象时,需要先查看父类是如何对这些数据进行初始化的.

如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定.

Super()语句一定子类构造函数的第一行.

子类的实例化过程.

子类中所有的构造函数默认都会访问父类中空参数的构造函数.当父类中没有空参的构造函数时,子类必须通过super语句形式来指定要访问的构造函数.子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数.子类中至少会有一个构造函数会访问父类中的构造函数.

 

final关键字

final修饰的类不可以被继承

final修饰的变量是一个常量,只能被赋值一次.

final修饰的方法可以被继承.不可以被覆盖

内部类只能访问被final修饰的局部变量.

 

抽象类

抽象方法

当多个类中出现相同功能,但是功能主体不同.这时可以进行向上抽取.只抽取功能定义,而不抽取功能主体.用abstract来修饰.抽象方法必须存放在抽象类中.抽象类不可以new创建对象..抽象类中的方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用.如果子类只覆盖了部分抽象方法.那么该子类还是一个抽象类.

 

模板方法设计模式.

在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出来,由该类的子类去完成.

 

 

接口Interface

格式特点:

1.接口中常见定义:常量,抽象方法.

2.接口中的成员都有固定修饰符

常量:public static final

方法:public abstract

接口中的成员都是public的

接口:是不可以创建对象的,因为有抽象方法.需要被实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类.

接口可以被类实现,一个类可以实现多个接口,也是对多继承不支持的转换形式,Java支持多实现.

 

面象对象第三大特性多态

多态可以理解为事物存在的多种体现形态.

Animal c=new cat;

1.多态的体现

父类的引用指向自己的子类对象.

父类的引用也可以接收自己的子类对象.

2.多态的前提

必须是类与类之间有关系,要么继承,要么实现.

通常还有一个前提,存在覆盖.

3.多态的好处

多态的出现大大的提高程序的扩展性.

4.多态的应用

5.多态的弊端

提高了扩展性,但是只能使用父类的引用访问父类中的成员.

 

6.多态的出现代码中的特点

在多态中成员函数的特点:

在编译时期:参阅引用型变量所属的类中是否有调用的方法,如果有,编译通过,如果没有,编译失败.

在运行时期:参阅对象所属的类中是否有调用方法.

简单总结就是编译时看左边,运行时看右边.

在多态中,成员变量的特点:(非静态的)

无论编译和运行,都参考左边(引用型变量所属的类)

多态类型提升,向上转型

强制将父类的引用转成子类类型.向下转型

7.面向对象,内部类.

内部类的访问规则:

      1. 内部类可以直接访问外部类中的成员,包括私有.因为内部类中持有了一个外部类的引用,格式外部类名.this

   2. 外部类要访问内部类,必须建立内部类对象.

如果要直接访问内部类中的成员,成员变量要写内部类的全名,要说明该内部类属于哪一个外部类.

   3.匿名内部类:(注意匿名内部类的书写规范).

①.匿名内部类其实就是内部类的简写格式.

②.定义匿名内部类的前提:内部类必须是继承一个类或者实现接口.

③.内部类的格式.:new父类或者接口(){定义子类的内容}

④.其实匿名内部类就是一个匿名子类对象.(定义类和建立对象封装在一起).可以理解为带内容的对象.

⑤.匿名内部内中定义的方法最好不要超过3个

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值