面向对象

来源:互联网 发布:淘宝客招募平台 编辑:程序博客网 时间:2024/06/08 11:13


这是我总结的面向对象的各个知识点:

1、继承:

(1)主要功能:扩展类的功能、代码的重用

(2)Java中只能允许单继承,但可以实现多个接口

 

2、子类对象的实例化过程:

先调用父类的构造方法,再调用子类的构造方法

 

3、Super关键字:

1)从子类调用父类的操作,调用父类的属性、方法、构造方

2super()表示调用父类的构造方法,必须放在子类构造方法的第一行

3Super.方法(),明确指定访问父类的方法

(4)super.属性,明确调用父类的属性

 

4、子类覆写父类的方法:

子类的方法覆写父类的方法时,子类方法的访问权限不能比父类更严格

问题:方法从父类的private变为子类的dafault算是覆写吗? 

不算,而是在子类中重新定义了一个新的方法


5、final关键字:

(1)使用final声明的类不能有子类

(2)使用final声明的变量为常量,常量的值不可改变

(3)使用final声明的方法不能被子类覆写

 

6、全局常量:

static final 同时修饰的, public static final String STR=”hello” ;

 

7、抽象方法:

(1)定义:只声明而未实现的方法,必须使用abstract关键字

(2)例如: public  abstract  void  fun()  ;

 

8、抽象类:

(1)定义:包含一个抽象方法的类为抽象类

(2)抽象类和抽象方法必须使用abstract 关键字声明

(3)抽象方法只需声明,不需实现

(4)抽象类必须被子类继承,子类(假如不是抽象类的话)必须实现抽象类中的所有  抽象方法

(5)抽象类不能实例化对象

(6)抽象类中也可以包含一个接口

(7)抽象类中也可以一个抽象方法都没有,适配器类就是一个比较典型的例子,本来适配器类可以不用变为抽象类,只是觉得适配器类

 中的方法全为空,这样的类是没有任何意义的,所以将其变为抽象类使其不能实例化生成对象。

 

9、抽象类中可以定义构造方法吗?

答:可以。因为抽象类必须被子类所继承,而子类在实例化之前又得先调用父类的构造方法,所有 可以。

 

10、接口:

(1)全部由“全局常量”和“公共的抽象方法”组成

(2)定义格式:  interface 接口名称全局常量 ;  公共抽象方法 ; }

(3)子类实现方式: class 子类 implements 接口名称{}

(4)一个接口可以同时继承多个接口 interface A extends 接口B,接口C{}

(5)一个抽象类可以实现多个接口,但是一个接口却不可以继承抽象类

(6)一个抽象类中可以包含多个接口,一个接口中也可以包含多个抽象类

 

11、类的多态:

(1)方法的重载与覆写

(2)对象的多态性

 

12、对象的多态性:

(1)向上转型:子类对象--->父类对象 (程序自动完成)

父类 父类对象 子类实例;

A  a  = new  B()

转型之后因为操作的是父类,所以子类新的方法不能访问

(2)向下转型:父类对象--->子类对象 (向下转型时,必须明确的指明要转型的子类 类型)

      子类  子类对象(子类)父类对象实例;

  注:在发生向下转型前要先进行向上转型,否则会出现异常

  A   a=new  B() ;  //先向上转型

  B   b=(B) a  ; //再强制性向下转型

(3)可以解决多个参数接受的问题

 

13、instanceof关键字:

(1) 对象 A instanceof ;如果对象A是类B的实例,则返回true,则false

(2) 作用:在对象进行向下转型之前,最好先用instanceof判断下

 

14、注意:

一个类永远不要继承一个已经实现好了的类,而是去继承抽象类或者实现接口

 

15、抽象类的实际应用:

(1)多用于 “模板设计”

 

16、接口的实际应用:

多用于 “制定标准


17、static关键字:

(1)被static 修饰的属性或方法 可以用类直接调用

(2)Static所修饰的属性 不是某个对象所特有的,而是所有对象共有的

(3)被static修饰了的方法里面不能存在“非static”的属性和方法,因为static可以在对象没有被实例化之前就被类调用,而

 其他属性和方法需要对象被实例化后再调用。但是非static方法中却可以调用static方法和属性

18、抽象类与普通类的区别:

抽象类就是比普通类多定义了一些抽象方法,另外除了不能实例化之外,其他没有什么区别。


19、this关键字:

(1)表示本类中的属性this.age

(2)表示表示当前对象this.getAge()

(3)调用类的构造方法,this()方法必须放在构造函数首行


20、java的4种代码块:

定义:使用“{}”进行括起来的代码

(1)普通代码块: 直接定义在方法中的代码块

(2)构造代码块: 将代码块直接定义在类中,构造块优先于构造函数执行,每实例化一个对象就执行一次构造代码块

(3)静态代码块:直接使用“static”关键字声明的代码块,主方法中的静态代码块优  先于main()方法执行;普通类中的静态代码块优先于构造方法执 行,只执行一次。

4)同步代码块:使用sychronized关键字修饰的代码块,在多线程同步操作时经常用到  语法格式: synchronized (同步的对象)需要同步的代码 }


21、Object类:

(1)一个类没有明确的指出继承哪个类,那么就表示默认继承Object

(2)Object 类是所有类的父类,只要是引用数据类型都可以用Object类的对象接收

(3)主要方法: equals()  toString()  hashCode(),一般的类中要覆写这三种方法


22、匿名内部类:

(1)定义:如果一个类在整个操作中只使用一次的话,那么可以定义成匿名内部类

(2)匿名内部类是在抽象类和接口上面发展起来的



0 0
原创粉丝点击