三、Java面向对象续

一、 继承

  1. 继承的概念:
    继承是类与类的一种关系, 是一种”is a” 的关系
    注: Java是单继承
  2. 继承的好处:
    子类拥有父类的所有属性和方法
    private修饰的无效
  3. 语法规则:
    class 子类 extends 父类
    例如
class Dog exends Animal {

}

二、 Java中的方法重写

  1. 什么是方法的重写:
    如果子类对继承父类的方法不满意, 是可以重写父类的继承的方法的, 当调用方法时会优先调用子类的方法。
  2. 语法规则:

a. 返回值类型

b. 方法名

c. 参数类型及个数
都要与父类继承的方法相同, 才叫方法的重写
三、 Java中的继承初始化顺序
继承的初始化顺序

  1. 初始化父类再初始子类
  2. 先执行初始化对象中属性, 再执行构造方法中的初始化
    四、Java中的final的使用
    final 关键字
    使用final关键字做标识有“最终的”含义
    final可以修饰类, 方法, 属性和变量
    final修饰类, 则该类不允许被继承
    final修饰方法, 则该方法不允许被覆盖(重写)
    final修饰属性
    则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)
    或在构造方法中赋值(但只能选其一)
    final修饰变量, 则该变量的值只能赋一次值, 即变为常量
    五、 Java中的super的使用
    super关键字: 在对象的内部使用, 可以代表父类对象
  3. 访问父类的属性
    super.age
  4. 访问父类的方法
    super.eat();
    super的应用
    子类的构造的过程中必须调用其父类的构造方法。
    如果子类的构造方法中没有显示调用父类的构造方法, 则系统默认调用父类的无参的构造方法
    如果显式的调用构造方法,必须在子类的构造方法的第一行。
    如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法, 则编译出错
    六、 Java中的Object类
    object类是所有类的父类, 如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类
    Object类中的方法,适合所有子类
  5. toString()方法
    在Object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
    可以通过重写toString()方法表示出对象的属性
  6. equals()方法
    比较的是对象的引用是否指向同一块内存地址
    Dog dog new Dog();
    一般情况下比较两个对象时比较他的值是否一致, 所以要进行重写
    七、 多态
    对象的多种形态
  7. 引用的多态
    父类的引用可以指向本类的对象
    父类的引用可以指向子类的对象
  8. 方法的多态
    创建本类对象时, 调用的方法为本类方法
    创建子类对象时, 调用的方法为子类重写的方法或者继承的方法
    新建一个父类
package cn.yiixue.java.object;
public class Animal {
    public void eat() {
        System.out.println(“动物具有吃的能力”);
    }
}

子类Dog

package cn.yiixue.java.object;
public class Dog extends Animal {
    public void eat() {
        System.out.println(“狗是吃肉的”);
    }
    public void watchDoor() {
        System.out.println(“狗具有看门的能力”);
    }
}

子类Cat

package cn.yiixue.java.object;
    public class Cat extends Animal{
}

入口类

package cn.yiixue.java.object;
public class Initail {
    public static void main(String[] args) {
        Animal obj1 = new Animal();
        Animal obj2 = new Dog();
        Animal obj3 = new Cat();
        //子类的引用指向父类的对象
        //Dog obj3 = new Animal(); //错误
        obj1.eat();//调用的是父类的方法
        obj2.eat();//调用子类的方法
        obj3.eat();//调用子类继承父类的方法
        //obj2.watchDoor(); //这个是不允许的
    }
}

八、 多态中的引用类型转换

  1. 向上类型转换(隐式/自动类型转换), 是小类型到大类型的转换
  2. 向下类型转换(强制类型转换), 是大类型到小类型的转换
  3. instanceof运算符, 来解决引用对象的类型, 避免类型转换的安全性问题
    例如 :
Dog dog = new Dog();
Animal animal = dog; //自动类型提升, 向上类型转换
Dog dog2 = (Dog) animal;//向下类型转换 强制类型转换
if(animal instanceof Cat) {
    Cat cat = (Cat) animal; //1 .编译时Cat类型 2. 运行时Dog类型
} else {
    System.out.println(“无法进行类型转换”);
}

九、 Java中的抽象类

  1. 语法定义:
    抽象类前使用abstract关键字修饰, 则该类为抽象类
  2. 应用杨景:

a. 在某些情况下, 某个父类只是知道其子类应该包含怎样的方法, 但无法准确知道这些子类如何实现这些方法。

b. 从多个具有相同特征的类中抽象出一个抽象类, 以这个抽象类作为子类的模板, 从而避免了子类设计的随意性。

  1. 作用:
    限制规定子类必须实现某些方法, 但不关注实现细节
    4、 使用规则
    a) abstract 定义抽象类

b) abstract定义抽象方法,只有声明, 不需要实现
c) 包含抽象方法的类是抽象类

d) 抽象类中可以包含普通的方法, 也可以没有抽象方法

e) 抽象类不能直接创建, 可以定义引用变量
定义抽象类:

package cn.yiixue.java.abstrac;
public abstract class Telphone {
    public abstract void call();
        public abstract void message();
    }

定义两个子类

package cn.yiixue.java.abstrac;
public class CellPhone extends Telphone {
    @Override
    public void call() {
        // TODO Auto-generated method stub
        System.out.println(“通过键盘来打电话”);
    }
    @Override
    public void message() {
        // TODO Auto-generated method stub
        System.out.println(“通过键盘来发短信”);
    }
}
package cn.yiixue.java.abstrac;
public class SmartPhone extends Telphone {
        @Override
        public void call() {
            // TODO Auto-generated method stub
            System.out.println(“通过语音打电话 “);
        }
        @Override
        public void message() {
            // TODO Auto-generated method stub
            System.out.println(“通过语音发短信”);
        }
}

定义入口类

package cn.yiixue.java.abstrac;
public class Initail {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Telphone tel1 = new CellPhone();
        tel1.call();
        tel1.message();
        Telphone tel2 = new SmartPhone();
        tel2.call();
        tel2.message();
    }
}

十、 Java中的接口

  1. 接口的概念
    类是一种具体实现体, 而接口定义了某一批类所需要遵守的规范, 接口不关心这些类的内部数据, 也不关心这些类里方法的实现细节, 它只规定这些类里必须提供某些方法。
    2、 接口的定义
    和类定义不同, 定义接口不再使用class关键字, 而是使用 interface 关键字
    接口定义 的基本语法:
【修饰符】 interface 接口名 [extends 父接口1, 父接口2…]
{
    零个到多个常量定义…
    零个到多个抽象方法的定义..
}

接口是用来被继承\被实现的, 修饰符一般建议用public 注意: 不能使用private和protected修饰接口

  1. 接口定义
    常量:
    接口中的属性是常量 , 即使定义时不添加
    public static final 修饰符, 系统也会自动加上.
    方法:
    接口中的方法只能是抽象方法, 总是使用, 即使定义时不添加public abstract修饰符, 系统也会自动加上.
  2. 使用接口
    一个类可以实现一个或多个接口, 实现接口使用implements关键字。Java中一个类只能继承一个父类, 是不够灵活的, 通过实现多个接口可以做补充
    继承父类实现接口的语法为:
[修饰符] class 类名 extends 父类 implements 接口1, 接口2.
{
    类体部分 //如果继承了抽象类, 需要实现继承的抽象方法; 要实现接口中的抽象方法
}

如果要继承父类, 继承父类必须在实现接口之前
使用接口:
接口在使用过程中, 还经常与匿名内部类配合使用
匿名内部类就是没有名字的内部类, 多用于关注实现而不关注 实现类的名称
语法格式:

Interface i = new Interface() {
    public void method() {
        System.out.println(“匿名内部类实现接口的方式”);
    }
};
IPlayGame ip3 = new IPlayGame() {
    @Override
        public void playGame() {
            // TODO Auto-generated method stub
            System.out.println(“通过匿名内部类的方式实现接口”);
        }
};
ip3.playGame();
new IPlayGame() {
    @Override
    public void playGame() {
        // TODO Auto-generated method stub
        System.out.println(“通过匿名内部类的方式实现接口”);
    }
}.playGame();

十一、 UML简介

  1. UML概念
    又称统一建模语言或标准建模语言
  2. 常用UML图
    用例图
    序列图
    类图
  3. UML建模工具
    Visio Rational Rose PowerDesign

猜你喜欢

转载自www.cnblogs.com/phptec/p/10104517.html