JavaSE基础笔记五

第四章 面向对象(二)

1.面向对象的特征二:继承性

1.为什么要有继承性:减少代码的冗余

2.通过“class A extends B"类实现类的继承

   子类(派生类):A   父类:(或基类 SuperClass) :B

3.子类继承父类后,父类中声明的属性、方法,子类就可以获取到

   明确:当父类中有私有的属性或方法时,子类同样可以获取得到,只是由于封装性的设计,使子类不可以直接调用罢了

   子类除了通过继承,获取父类的结构之外,还可以定义自己的特有的成分

   extends:子类是对父类功能的“扩展”,明确子类不是父类的子集

4.java中类的继承性只支持单继承:一个类只能继承一个父类。反之,一个父类可以有多个子类

5.子父类是相对的概念


方法的重写:

重载与重写

重载:同一个类 同一个方法名 不同的参数列表 注:方法的重载与方法的返回值无关

          >构造器是可以重载的

重写:(前提:在继承的基础上,子类在获取了父类的结构以后,可以对父类中同名的方法进行“重构“)


方法的重写:格式:修饰符 返回值类型 方法名 (参数列表) {  }

1.前提:有子类继承父类

2.子类继承父类以后,若父类的方法对子类不适用,那么子类可以对父类的方法重写(override overwrite)

3.重写规则:1)要求子类方法的“返回值类型 方法名(参数列表)”与父类的方法一样

                      2)子类方法的修饰符不能小于父类方法的修饰符

                      3)若父类的方法抛异常,那么子类方法抛的异常类型不能大于父类的

                      4)子父类的方法必须同为static或同为分static的


2.super关键字

1.相较于关键字this,可修饰属性,方法,构造器。


2.super修饰属性、方法:在子类的方法、构造器中,通过super.属性或者super.方法的形式,显式的调用父类的指定的属性或者方法,尤其是,当

子类和父类有同名的属性或方法时,调用父类中的结构,一定要用”super.“


3.通过”super(形参列表)“,显式的在子类的构造器中,调用父类指定的构造器。

>任何一个类(除object类)的构造器的首行,要么显式的调用本类中重载的其他的构造器”this(形参列表)“或显式的调用父类中指定的构造器

”super(形参列表)“,要么默认的调用父类空参的构造器”super()”

>建议在设计类时,提供一个空参的构造器


3.子类对象实例化的全过程

子类对象实例化的全过程

例:

public class TestDog {

private void mian() {

Dog d = new Dog();

d.setAge(10);

d.setName("狗狗");

d.setHostName("小明");

System.out.println("name:" + d.getName()+ " age:" + d.getAge() + "hostName" + d.getHostName());

}

}

//生物

class Creator{

private int age;


public int getAge() {

return age;

}


public void setAge(int age) {

this.age = age;

}


public Creator() {

super();

}

}

//动物类

class Animal extends Creator{

private String name;


public String getName() {

return name;

}


public void setName(String name) {

this.name = name;

}


public Animal() {

super();

}

}

//狗

class Dog extends Animal{

private String hostName;


public String getHostName() {

return hostName;

}


public void setHostName(String hostName) {

this.hostName = hostName;

}


public Dog() {

super();

}

}

4.面向对象的特征三:多态性

1.多态性的表现:①方法的重载与重写   ②子类对象的多态性

2.使用前提:①要有继承关系 ②要有方法的重写

3.格式:Person p = new Man();//向上转型

               //虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法

              p1.eat();

              p1.walk();

4.注意点:编译时,认为p是Person类型的,故只能执行Person里才有的结构,即Man里特有的结构不能调用

                  子类对象的多态性,并不适用于属性。

5.向下转型:

 1)使用强转符:()   

 2)向下转型前,最好先判断 instanceof


Object类

1.java.lang.Object,是所有类的根父类。


2.Object类仅有一个空参的构造器 public Object(){ }


3.关于方法:

1)equals(Object obj)


public boolean equals(Object){

return(this == obj);

}


==

1.基本数据类型:根据基本数据类型的值判断是否相等,相等返回true,反之返回false

   注:两端数据类型可以不同,在不同的情况下,也可以返回true

2.引用数据类型:比较引用数据类型变量的地址值是否相等

equals();

①只能处理引用类型变量 ②在Object类,发现equals()仍然比较的两个引用变量的地址值是否相等

   >像String包装类 File类 Date类 这些重写Object类的equals()方法,比较是两个对象的“实体内容”是否完全相同

   >若我们自定义一个类,希望比较两个对象的属性值都相同的情况下返回true的话,就要重写Object类的equals(Object obj)方法 


2)toString方法

当我们要输出一个对象的引用时,会调用此方法

①当我们没有重写Object类的toString方法时,打印的就是对向所在类,以及对象实体在堆空间的位置

②一般我们需要重写Object类的toString方法,将此对象的各个属性值返回

③像String类、Date、File类、包装类都重写了toString方法


包装类:

基本数据类型由于不是类,不能使用java类库里面提供的大量的方法,所以在设计上,我们让每一个基本数据类型都对应一个类,同时数据储存范围不变。

此时相当于基本数据类型具有了类的特点,这些类即为包装类(wrapper或封装类)

基本数据类型                                                  包装类

boolean                                                          Boolean

byte                                                             Byte

short                                                            Short

int                                                              Integer

long                                                             Long

char                                                             haracter

float                                                            Float

double                                                           Double


简易版

1.基本数据类型与对应的包装类有自动装箱、自动拆箱

如:int i = 10;

        Integer = i1 = i  //装

        int j = i1; //拆

2.基本数据类型、包装类  --->    String类:调用String类的重载的valueOf(Xxx xxx);

   String类--->基本数据类型、包装类:调用相应的包装类的parseXxx(String str);

 注意:String str = "123";

 int i = (int)str;              是错误的



本文出自 “阿成的博客” 博客,转载请与作者联系!

你可能感兴趣的:(java,基础)