Bootstrap

JAVA面向对象知识点总结

1.类与对象的概念:类就像是一个模板,而对象是类的一个实例化对象。拿生活中的例子来说,类就是一张设计图纸,而对象就是根据这张图纸建造出来的实物。

2.面向对象的三大特征:封装、继承、多态。

封装:把同一类事物所具有的共同属性和共同行为功能抽取到Java类中的过程称为封装并将类里面的数据和行为进行保护。常用方法为:设置数据的访问修饰符为private,这样外部的事物就不能随意更改类中的数据。

继承:子类继承父类的所有非private成员。

多态:关于多态需要记住三句话:

(1)父类类型的变量可以指向子类类型的对象。

(2)能够调用什么方法取决于变量的类型。

(3)具体调用什么方法取决于对象的类型。

什么意思呢?举个例子:假设父类类型是地球人,子类类型是中国人。

代码:

 class DiQiuRen{

pulbic void speak(){

System.out.println("我是地球人");

}

}

class Chinese extends DiQiuRen{

@override       

public void speak(){

System.out.println("我是中国人");     //子类重写父类的speak()方法

 

}

public void baiNian(){

System.out.println("过年好!");

}

}

public class Main{

public static void main(String[] args)

{

DiQiuRen dqr=new Chinese(); //根据多态中的第一句话,父类类型变量可以指向子类对象,即父类类型变量dqr指向子类对象

dqr.baiNian();//这句代码是有问题的,因为根据多态中第二句话,能够调用什么方法取决于变量的类型,而变量类型是地球人,可以调用的方法只有speak()方法,没有baiNian()方法。

dqr.speak();//这句代码的执行结果是“我是中国人”。解析:根据多态中第三句话,具体调用什么方法取决于对象的类型。在这里,对象的类型是中国人,所以具体执行的speak()方法是中国人类里的speak()方法。

3.对象间的关联关系

可以以对象作为一个类的成员变量。

例如:

有Dog类:

public class Dog{

private String name;

public String getName()

{

return name;

}

public void setName(String name)

{

this.name=name;

}

}

有Person类:

class Person(){

private Dog pet;

public Dog getPet()

{

return pet;

}

public void setPet(Dog pet)

{

this.pet=pet;

}

public void sayHello()

{

if(this.net==null)

{

System.out.println("我没有宠物");

}

else

{

System.out.println("我的宠物是:"+pet.getName());

}

}

}

Main类:

public class Main{

  public static void main(String[] args)

{

Person p=new Person;

Dog d=new Dog();

d.setName("旺财");

p.setPet(d);//设置对象间的关联关系

p.sayHello();

}

 

}

4.包的作用

(1)避免类重名

(2)便于管理不同用途的类

注意,包的命名:包名小写,公司域名反.产品名.模块名

例如:百度的域名是:www.baidu.com

包名则是:com.baidu.www

5.关于final的用法:

(1)final修饰局部变量表示这个变量只能被赋值一次;

(2)final类型的方法不能被重写;

(3)final类型的类不可以被继承。String 类就是final类。

6.静态static:

有时候想定义一些不和具体对象关联、不需要new就可以调用的方法(不访问成员变量的方法就可以定义成static 方法);

一些场景下会要求一个类的多个实例共享一个成员变量。这时候就要用到static。

(1)static方法可以直接通过类名.方法名调用,而非static方法则需要new。

(2)static成员不可以访问非static成员,而非static成员可以访问static成员;

static与final连用时表示常量:值不可改变且全局共享。

7.抽象类与接口

抽象类的特点:

(1)抽象方法没有方法体,连空方法体都不能有;一旦类中有抽象方法,这个类一定要被修饰为抽象类;

(2)抽象类是不可以被实例化的类;

 (3)抽象类可以没有抽象方法;

(4)抽象类的子类必须实现父类的所有抽象方法,除非抽象类的子类也是抽象类。

接口的特点:

(1)接口中不能声明普通成员变量,只能声明static成员变量;

(2)接口可以继承其他接口。

相同点:都有抽象方法

不同点:(1)抽象类中可以定义方法的实现(这个方法不是抽象方法),接口中一定不能定义方法的实现;

               (2)一个类只能继承一个父类,而一个类可以实现多个接口;(继承的限制)

                (3)接口中不可以定义成员变量,而抽象类中可以定义成员变量。

8.匿名内部类

有时候创建一个类的子类只是为了创建一次它的对象,声明一个子类很麻烦,可以直接new 类名(){//类体};

这样就是相当于声明一个了这个类的子类,并创建了这个子类的对象。

注意:匿名内部类的this问题:类中的this指的是匿名内部类的对象,如果想要指外部的对象,要用“类名.this”.

9.equals和==

==运算时用于比较两个是否是同一个对象。如果要比较对象的内容是否相等,要调用equals()方法,返回true表示相等,false表示不相等。

10.类的静态代码块

静态代码块在类第一次被使用时执行一次,且在构造函数之前执行,一般用于对类进行初始化。

11.枚举类型

枚举类型的地位和类和接口是一样的!

为什么要有枚举?答:限定一个数据的可选值方向。例如:方向

(1)枚举声明:public enum Dir{

Left,Right,Up,Down

}

(2)枚举类型的赋值:Dir d=Dir.Left;

(3)枚举类型的变量相等使用==就可以

 

 

 

;