java学习笔记38

面向对象

什么是多态

1.多态概述 多态是继封装、继承之后,面向对象的第三大特性。

2.多态现实意义理解:

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

即同一方法可以根据发送对象的不同而采用多种不同的行为方式。

3.多态体现为父类引用变量可以指向子类对象

4.前提条件:必须有子父类关系。

5.存在条件 : 有继承关系,子类重写父类方法,父类引用指向子类对象

6.一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)

创建一个Person类和student类student类是person的子类

在Application类中new student(); 再分别使person类和object指向student

package oopzong.oop.opp5;

public class Application {
   public static void main(String[] args) {
       //一个对象的实际类型是确定的
       //new Student();
       //new Person();

       //可以指向的引用类型就不确定了:父类的引用指向子类
       Student s1 = new Student();
       Person s2 = new Student();
       Object s3 = new Student();
  }
}

在person类中写一个方法

package oopzong.oop.opp5;

public class Person {
   public void run(){
       System.out.println("你好");
  }
}

在Application执行s2

public class Application {
   public static void main(String[] args) {
       //一个对象的实际类型是确定的
       //new Student();
       //new Person();

       //可以指向的引用类型就不确定了:父类的引用指向子类
       Student s1 = new Student();
       Person s2 = new Student();
       Object s3 = new Student();
       s2.run();
  }
}
你好

在student类中重写父类方法

package oopzong.oop.opp5;

public class Student extends Person {
   @Override
   public void run() {
       System.out.println("son");

  }
}

在Application输出s1 ,s2得

s2.run();//子类重写了父类的方法,执行子类的方法
s1.run();

son
son

 

再在student类中定义一个方法,且父类person中没有eat方法

public void eat(){
   System.out.println("eat");
}

执行s1,s2

public class Application {
   public static void main(String[] args) {
       Student s1 = new Student();
       Person s2 = new Student();
       Object s3 = new Student();
       
       s2.eat();//报错,s2的类型是person,person中没有eat方法
       s1.eat();
  }
}

当子类和父类有相同的方法,且子类没有重写父类则调用父类的,子类重写则调用子类

对象能执行哪些方法,主要看对象左边的类型,和右边关系不大

//Student(子类)能调用的方法都是自己的或者继承父类的
Student s1 = new Student();
//Person 父类型 可以指向子类,但是不能调用子类独有的方法
Person s2 = new Student();
Object s3 = new Student();

 

多态的主要事项

1.多态是方法的多态,属性没有多态

2.父类和子类,有联系 (不能把狗转换成猫) 类型转换异常classcastexception!

3.存在条件:继承关系,方法需要重写,父类的引用指向子类对象 father f1 = new son()

 

不能重写的

1.static 静态方法,属于类,它不属于实例

2.final 常量

3.private方法:

posted @ 2022-10-18 15:03  新人用户  阅读(29)  评论(0)    收藏  举报