java学习笔记(面向对象)

1.多态:

  • 心得体会:

前提:必须有子父类关系。
实质:在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
定义格式:父类类型 变量名=new 子类类型();

样例:
多态成员变量:编译运行看左边

  Fu f=new Zi();

     System.out.println(f.num);//f是Fu中的值,只能取到父中的值

多态成员方法:编译看左边,运行看右边

Fu f1=new Zi();

  System.out.println(f1.show());
  //f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。

多态的转型分为向上转型和向下转型两种
向上转型:多态本身就是向上转型过的过程

 使用格式:父类类型 变量名=new 子类类型();

  适用场景:当无法对父类进行实例化,并且需要通过子类的重写方法来实现父类的方法功能

向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用类型

     使用格式:子类类型 变量名=(子类类型) 父类类型的变量;

2.final

  • 心得体会:

l:用来修饰类,方法、变量
1,修饰变量、常量, 值不可改变
2,修饰方法, 不能被重写
3,修饰类, 不能被继承

3.继承

  • 心得体会:
  1. 子类对象在进行实例化前首先调用父类构造方法,再调用子类构造方法实例化子类对象。
  2. 实际在子类构造方法中,相当于隐含了一个语句super(),调用父类的无参构造。同时如果父类里没有提供无参构造,那么这个时候就必须使用super(参数)明确指明要调用的父类构造方法。
  3. 在进行继承的时候,子类会继承父类的所有结构(包括私有属性、构造方法、普通方法) 显示继承:所有非私有操作属于显示继承(可以直接调用)。
    隐式继承:所有私有操作属于隐式继承(不可以直接调用,需要通过其它形式调用(get或者set))
  4. 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过
    super 关键字调用父类的构造器并配以适当的参数列表。 如果父类构造器没有参数,则在子类的构造器中不需要使用 super关键字调用父类构造器,系统会自动调用父类的无参构造器。
  5. 子类重写了父类中的某一个方法,隐藏父类中的字段,假如想在子类中访问到父类中被重写的方法和隐藏父类的字段,可以在子类中通过使用关键字super来调用父类中被重写的方法和访问父类中被隐藏的字段。

多态继承的实例运用

package Idea.code.test;
import  java .util.Scanner;
public class HelloWorld {
      public static void main(String []args)
      {
          animal ani=new Cat();
          animal ani1=new Dog();
          animal ani2=new Elephant();      //多态三种动物
            Person p=new Person();           //定义一个人
             p.feed(ani);                         //人来喂养动物吃
             p.feed(ani1);
             p.feed(ani2);
      }
}
class Person{            //人来喂动物
      public void feed(animal ani)           //animal的 ani变量整合了所有动物,但是看实参具体是个什么动物就是什么动物      
      {
          ani.eat();                           //比如它多态的子类是个猫就用Cat吃,如果多态的子类是只狗就用Dog吃
      }
}
 class animal{         //动物整合所有具体动物的吃方法
      public void eat()  
      {

      }
 }
 class Dog extends  animal{    //狗是一种动物
    public void eat()      //继承动物的吃,具体吃什么自定义
    {
        System.out.println("狗吃肉");
    }
 }
 class Elephant extends  animal{     //大象是一种动物
     public void eat()        //继承动物的吃,具体吃什么自定义
     {
         System.out.println("大象吃香蕉");
     }
 }
 class Cat extends  animal{           //猫是一种动物
          public void eat()	//继承动物的吃,具体吃什么自定义
          {
              System.out.println("猫吃鱼");

          }
 }

4.抽象类与接口

  • 心得体会:
  1. 接口和抽象类都不能被实例化,只能用多态的方法调用子类的重新方法。它们都位于继承树的顶端,用于被其他类实现和继承。

  2. 接口的成员变量默认为静态常量(public static fianal),成员方法默认为抽象方法(public
    abstract),不能定义普通成员变量;抽象类里既可以定义普通成员变量,也可以定义静态常量。

  3. 接口定义的是一种规范,没有构造器只能包含抽象方法、静态方法、默认方法和私有方法;抽象类里可以包含构造器(有参和无参),但抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始操作。

  4. 接口中不能包含初始化块;但抽象类完全可以包含初始化块。

  5. 一个类只能继承一个抽象类,但可以实现多个接口。(接口也可以继承多个接口)
    (因为继承多个抽象类,那么重写会造成歧义,继承多个接口是为java灵活性不足所做的补充。)

            子类名 extends 父类 Implements 接口1,接口2... ```
    
    
  6. 如果实现接口或者抽象类的子类是抽象类,则可以实现一部分 。

  7. 抽象类实现某个接口,可以不实现所有接口的方法,可以由它的子类实现。而普通类即非抽象类则必须实现接口里的全部方法。

  8. 抽象类和接口的抽象方法必须全部重写,但抽象类的非抽象类可以不必要重写。

  9. 接口可以继承接口,抽象类不可以继承接口,但可以实现接口。
    接口和抽象类一样,都是在父类中声明多个抽象类让子类来重写调用,都可以用多态,只是接口可以继承多个,但抽象类可以有抽象方法、实现方法而接口只能有抽象方法。
    抽象和接口的本质:子类实现多个接口、继承一个抽象类,来调用他们声明好的抽象类方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值