Java面向对象(四)

一:多态java

面向对象的三大特性:
一、封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现。 
二、继承:很好的实现了代码的复用,提升了编程效率。 
三、多态:程序的可扩展性及可维护性加强。编程

引用类型之间的类型转换: 前提类之间有继承关系
一、向上转型 父类类型的引用 引用 子类对象
1) 语法: 父类类型  引用名= new 子类类型();
2)父类型的引用能够访问哪此方法
a 、父类中声明的方法
b、若是子类中重写了父类的方法,则执行子类重写后的方法
c、 不能访问子类中特有的方法。
3) 示例:安全

class Animal{
   public void eat(){
      System.out.println("宠物在吃...");
   }
   public void show(){
	  System.out.println("显示宠物信息...");
   }
}   
   
class Dog extends Animal{
   public void eat(){
      System.out.println("狗狗吃狗粮...");
   }
   public void play(){
      System.out.println("狗狗啃家具...");
   }   
}

class SmallDog extends Dog{

}

class Cat extends Animal{
   public void eat(){
      System.out.println("喵咪在吃鱼...");
   }
   public void play(){
      System.out.println("喵咪在玩球...");
   }   
}
public static void main(String[] args){
   Animal am = new Dog();
   
   am.eat();
   am.show();
   
   System.out.println("--------------------------");
   
   Animal am2 = new Cat();
   am2.eat();
}

二、向下转型
1) 语法:
(子类类型)父类引用;  //父类引用所引用的对象为子类对象
2) 向下转型是不安全的。 引起异常: java.lang.ClassCastException
3)向下转型 之间使用instanceof关键词判断。
语法:
引用名  instanceof 类名或接口名
编译期: instanceof 类名  与引用名的类型之间有继承关系,无则编译错误!
运行期: 引用的对象的类型为 "instanceof 类"的同类或子类  返回true, 其余 返回falsecode

Animal am = new Dog();
System.out.println(am instanceof Animal);//true
System.out.println(am instanceof Dog);//true
System.out.println(am instanceof Cat);//false
System.out.println(am instanceof Object);//true
System.out.println(am instanceof SmallDog);//false
System.out.println(am instanceof String);//String与Animal之间没有继承关系

多态做用:对象

1 多态的前提
1.1 继承的存在
1.2 方法重写
2 多态表现方式:
2.1 语法:
父类类型  引用名= new 子类类型();
2.2 多 态的通常格式为:方法的参数继承

使用一个方法能够对应父类的全部子类。接口

1) 将父类的引用作为方法的形参。开发

2)将子类的实例作为方法的实参。io

3 多态的好处:
3.1  知足开发的原则:  开-闭原则
开: 对功能的扩展开放。  ==》建立新的子类,经过方法重写修改原父类中的方法的功能。
闭合 :对原有代码的修改是闭合。 同时保证原有功能和新功能均可以执行。==》以多态的方式,在不修改原代码的状况下使用子类
3.2 多态的做用: 代码的复用,易扩展。易维护。编译

(final关键字):

1. final能够修饰什么
类,成员方法,成员变量,静态变量,局部变量
2. final修饰类
不能被子类继承
3. final修饰方法
不能被子类重写
4. final修饰实例变量
仅赋值一次,不可更改。
赋值的方式为:
1)、在声明的同时赋值
2) 、 在构造方法中赋值
5. 能够与static一块儿修饰实例变量,则为常量。全部字母大写。
6. final修饰局部变量
仅赋值一次。
7. final修饰的引用类型的变量
不能引用新的对象。可是所引用的对象的内容能够改变。

(抽象类):

一、为何使用抽象类?
某些类建立对象后,没有具体的含义(宠物,形状),所以把这些类声明为抽象类。
二、如何定义类为抽象类?
在定义类时添加:abstract 修饰符
三、抽象类的特色
3.1 抽象类不能实例化对象
3.2 抽象类必须被子类继承。
3.3 抽象类的引用能够引用子类对象。
四、什么样的方法能够定义为抽象方法
父类中的某些方法,各个子类各有不一样的实现方式时,把父类中的此方法声明为抽象方法。
五、抽象方法的特色
语法: 访问修饰符  abstract 返回值类型  方法名(参数列表 );
特色:
1) 抽象方法没有方法体。
2)抽象方法必须被子类重写。若是子类不重写抽象方法,则子类声明为抽象类
3)包含抽象方法的类必须声明为抽象类。

六、抽象类和抽象方法
1)抽象类中能够有抽象方法,也能够没有抽象方法。
2)抽象方法必须声明在抽象类中
七、abstract修饰方法时的注意事项
7.1  不能修饰私有方法
7.2 不能修饰静态方法
7.3 不能与final一块儿修饰成员方法

八、抽象类示例:

类图:

相关文章
相关标签/搜索