Java学习笔记4——多态

多态

1.引用多态:1)父类的引用可以指向本类的对象;2)父类的引用可以指向子类的对象

public static void main(String[] args) {
        Animal obj1 = new Animal(); //父类的对象指向本类
        Animal obj2 = new Dog(); //父类的引用可以指向子类的对象
        //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类
 }

2.方法多态   1)创建本类对象时,调用的方法为本类方法;2)创建子类对象时,调用的方法为子类重写的方法或者继承的方法

public class Initial {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
        Animal obj1 = new Animal(); //父类的对象指向本类
        Animal obj2 = new Dog(); //父类的引用可以指向子类的对象
        //Dog obj3 = new Animal(); 不可以使用子类的引用指向父类
        obj1.eat();
        obj2.eat();
 }
}

注意:如果是子类中独有的方法,则不能通过“父类的引用指向子类的对象”

3.引用类型转换

1)向上类型转换(隐式/自动类型转换)——小类型到大类型

2)向下类型转换(强制类型转换)——大到小

3)instanceof运算符,解决引用对象类型,避免类型转换的安全问题——判断某个类型是否是某个类型的子类型,返回一个bool值

Dog dog = new dog();
Animal animal = dog;  //自动类型提升  向上转换
Dog dog2 = (Dog)animal; //向下类型转换
Cat cat = (Cat)animal;//强制类型转换Cat,编译器不会报错;但是animal对象在内存中是dog类型,强制转换成cat类型会造成类型不匹配——cat已经不是animal的子类型了
//使用instanceof
Dog dog = new Dog();
  Animal animal = dog;
  if(animal instanceof Dog){
   Dog dog2 = (Dog)animal;
  }else{
   System.out.println("无法dog");
  }
 
  if(animal instanceof Cat){
   Cat cat = (Cat)animal;
  }else{
   System.out.println("无法进行类型转换---");
  }

4.Java中的抽象

1)语法定义:使用abstract修饰

2)场景:a)父类只是知道子类包含的方法,无法确切子类的方法如何实现——子类必须有那些方法;b)从多个具有相同特征类中抽象一个抽象类,以抽象类作为子类模版

3)作用:限制规定子类必须实现的某些方法,但不关注实现细节

4)使用规则:a.abstractd 定义抽象方法,只有声明,不需要实现;b.包含抽象方法的类是抽象类;c.抽象类中可以包含普通方法,也可以没有抽象方法;d.抽象类不能直接创建,可以定义引用变量

抽象类:
package com.imooc;
public abstract class Telephone {
 public abstract void call();
 public abstract void message();
}
子类1:
package com.imooc;
public class SmartPhone extends Telephone {
 public void call() {
  // TODO Auto-generated method stub
        System.out.println("通过语音电话");
 }
 public void message() {
  // TODO Auto-generated method stub
  System.out.println("通过语音短信");
 }
}
子类2:
package com.imooc;
public class CellPhone extends Telephone {
 public void call() {
  // TODO Auto-generated method stub
  System.out.println("通过键盘电话");
 }
 public void message() {
  // TODO Auto-generated method stub
  System.out.println("通过键盘短信");
 }
}
接口函数:
package com.imooc;
public class Initial {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Telephone tel = new CellPhone();
  tel.call();
  tel.message();
  Telephone tel2 = new SmartPhone();
  tel2.message();
  tel2.call();
 }
}

5.Java中的接口

1)接口:接口定义了某一些类所遵循的规范,接口不关心类的内部数据,不关心类的方法实现细节,只规定类里必须提供的方法。

2)使用interface关键字,而类用class。接口中都是常量或抽象方法

3)接口用来被继承和被实现的,使用public,不能使用private和protect,interface前面使用abstract,abstract、public static final可以省略

public abstract interface IPlayGame {

public static final int a = 8;

public abstract void playGame(); // 不能  ...playGame(){};

}

注意:接口中方法不能有方法体  例如:错-void gg(){}   对-void gg();

定义接口:
public abstract interface IPlayGame {
 public static final int a = 6;
 public abstract void playGame();
}
继承接口:
public class psp implements IPlayGame {  
 public void playGame() {
  // TODO Auto-generated method stub
  System.out.println("具有玩游戏的功能");
 }
}
时间: 2024-08-08 01:16:18

Java学习笔记4——多态的相关文章

Thinking in java学习笔记之多态

多态是一种将改变的事物和未变的事物分离开来的重要技术.

Java学习笔记之多态

1.父类型的引用可以指向子类型的对象: Parent p = new Child(); 2.当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误:如果有,再去调用子类的该同名方法. 3.静态static方法属于特殊情况,静态方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用.调用的时候用谁的引用,则调用谁的版本. 4.使用多态,只能使用重写父类的方法,若方法只在父类定义而没有重写,调用的是父类的方法. 5.如果想要调用

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java 学习笔记(2015.7.13~17)

Java 学习笔记(2015.7.13~17) Java this关键字 表示本类中的属性,调用本类中的方法 class Person {        private String name;         private int age;         public Person(String name, int age) {         this.name = name;//调用本类中的属性         this.age = age;//同上} //get&set方法:    

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if

Java学习笔记_26_泛型概述

                                                               泛型概述 在Java中存入容器中的对象再取出时需要转换类型,因为对象加入容器会被转换成Object类型,而取出时要转换成实际类型.但向  下类型转换都 是存在潜在危险的,因此应该尽量避免它们.  Java的泛型: 所谓泛型就是在定义(类.方法.形参.成员变量等等)的时候,指 定它们为通用类型,也就是数据类型可以是任意类型. 泛型为提高大型程序的类型安全和维护带来了很大的潜

Java学习笔记&lt;3&gt;面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

java学习笔记 5

随手 看到了这篇关于Java到底哪里出了问题的文章,笑傻了23333 “Java developers just can’t help themselves it seems - give em an inch, and next thing you know you’re looking at a OO hierarchy 15 layers deep and instantiating a hammer hammer factory.” 继承 Java中的继承用extends,所有的继承都是