Java 面向对象知识点总结(二)

Java 面向对象知识点总结(二),第1张

5、成员的覆盖和多态

变量隐藏:对于成员变量来说,当子类本身具有与继承自父类的成员变量名称相同的成员变量时,便构成了成员变量的隐藏。其含义是,在子类中直接调用该成员变量时,将调用的是子类中本身具有的成员变量,而不是父类继承的成员变量。

方法重写:子类中的函数定义和父类相同时,在子类对象使用该方法时,会执行子类中重写的方法。如果子类需要引用父类中原有的方法,可以使用 super 关键字。

例:

class Dialog{
   public void show(){          
    System.out.println("Dialog.show()");
  }
  }
class FontDialog extends Dialog{
   public void show(){   //方法重写
    super.show();        //调用父类的show函数
     System.out.println("FontDialog.show()");
  }
  }

方法重写的规则

1、子类继承父类的前提 2、方法名相同3、参数列表相同4 、子类方法的返回值类型要与父类的相同或者是其子类5、访问修饰符不能比父类更严格(子类>=父类)

2、静态方法不属于对象,不能被继承,调用需要直接用类名.方法名()
静态方法不能与普通方法重名

多态

  1. 父类中的方法被子类重写
  2. 在别的类中,有一个参数为父类类型的方法,调用了被重写的父类方法
  3. 调用时,实参时子类对象,那么就会调用该子类对象重写后的方法

上转型和下转型

Father f = new Son();//上转型, 自动转换

上转型特点:

父类的对象f可以调用子类中重写父类的函数和父类本身具有的方法和变量,而子类中新增的方法和变量不能调用。

Son s =(Son) f;// 向下转型:通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换

向下转型特点:

1.向下转型可以调用子类类型中所有的成员

2.父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,就是编译是不会出错误。但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现 Java 强制类型转换异常

6 抽象和接口

抽象类:

例:

abstract class A{                               //定义抽象类A
  public static final String FLAG ="CHINA";
  private String name ="Java";
  public String getName(){                    //定义非抽象方法getName
  return name;
   }
  public abstract void print();               //定义抽象方法print
  }

  class B extends A{                          //B继承抽象类A,要重写A全部抽象方法
  
  public void print(){                        //重写print
  System.out.println("FLAG="+FLAG);
  System.out.orintln("姓名:"+super.getName));
   }
  }

  public class Test{
  public static void main(String[]args){
  B b=new B();                                 //实例化子类对象
  b.print();                                   //调用被子类重写过的方法
   }
  }

接口的规则:

1、接口关键字:interface,实现的关键字是implements,接口之间可以用extends继承

2、接口是抽象类的进一步抽象,接口不能被实例化,(因为:1.接口中的成员函数默认都是public访问类型,成员变量默认是用public static final标识的,所以接口中定义的变量是全局静态常量。2.接口中的方法默认其为抽象函数。)

3、接口中可以有静态方法,但规范不建议

4、接口中的变量全是公共静态变量,一般在工作中一个接口中可以全是常量,没有方法

5、接口用于拓展功能,多个接口可以被一个接口继承,多个接口可以被一个类实现

例:

  package interfacel;
  interface Dialog{                            //定义接口
   public void show();               
  }
  class FontDialog implements Dialog{          //实现接口
  public void show(){                          //重写接口的方法show()
  System.out.println("FontDialog.show()");    
  }
  }
  public class Main
  public static void toCenter(Dialog dialog){  
  System.out.println("计算屏幕数据");
  dialog.show();
  }
  public static void main(String[args){
  FontDialog fd=new FontDialog();
  toCenter(fd);
  }
  }

抽像方法和抽象类的定义和特点
1抽象类关键字abstract
2、抽象方法必须在抽象类内,抽象方法没有方法体
3、抽象类不能被实例化
4、抽象类中可以没有抽象方法、可以有普通方法
5、抽象类可以有构造方法,但规范是保证有无参构造

抽象类和接口的异同点

相同点

         都代表抽象层、都不能被实例化,都可以包含抽象方法,都可以实现多态,

         抽象类中的非抽象方法不用重写,其他必须重写,接口的方法必须重写

不同点:

          接口不能有构造方法,接口不建议有静态方法

          抽象类中可以有普通方法,抽象方法也可以不是公共的

          抽象类的目的是代码重用,接口的目的是功能拓展(被实现)

一个类只能继承一个父类,但可以实现多个接口

格式:class子类extends父类implements接口1,接口2,…{}   

注:关键字extends必须位于关键字implements之前。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/737580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存