zoukankan      html  css  js  c++  java
  • JAVA面对对象(二)——继承、方法的覆写

    1.继承就是基于已存在的类构造一个新类,继承已存在的类就能复用类的方法和属性,并且能够添加新的方法和属性。也就是子类和父类

    2.一个父类可以拥有多个子类,一个子类只允许有一个父类

    3.用extends关键字表示一个类继承自另一个类

    1 class A{ }  //父类或基类
    2 class B extends A { }  //B是A的子类
    3 class C extends B { }  //C是B的子类,可以直接复用A的属性和方法

    4.一切类的祖先是Object类

    5.如果子类中的一个方法,其名称、返回类型以及参数列表和父类中的某个方法一样,那么可以说子类的方法重写了父类的方法

    6.重写父类方法时不可降低方法的访问权限

    7.重写了父类方法后要调用被重写的方法,可在子类方法中使用super.被重写的方法()

    8.子类不继承父类的构造方法,子类的构造方法必须调用父类的构造方法,如果子类没有显式的调用父类构造方法,系统默认调用无参数的构造方法,相当于省略了super();语句

    9.子类构造方法中使用super()调用父类构造方法,不必须作为子类构造方法的第一条语句

    10.子类在实例化时先调用父类构造方法,后调用子类构造方法

     1 //父类
     2 public class Inherit1 {
     3     private String name;//私有属性
     4     private String sex;    
     5     //根据属性生成构造方法
     6     public Inherit1(String name, String sex) {
     7         this.name = name;
     8         this.sex = sex;
     9     }
    10     public void hello(){
    11         System.out.println("我叫:"+name+"我是:"+sex+"孩!");
    12     }
    13 }
    14 //子类
    15 public class Inherit2 extends Inherit1{  
    16     public Inherit2(String name,String sex) {
    17         //调用父类的构造方法
    18         super(name,sex);
    19     }
    20     public void hello(){
    21         System.out.println("我是新来的!");
    22         super.hello();//调用父类方法
    23     }
    24 }

     11.在实例化子类对象时,先调用父类构造方法,在调用子类构造方法;(就好比要先有父亲才会有儿子),可从以下例子看出

     1 public class Person {
     2     private String name;
     3     private int age;
     4     public Person() {        
     5         System.out.println("父类构造方法");
     6     }
     7     public String getName() {   //取得name属性
     8         return name;
     9     }
    10     public void setName(String name) {  //设置name属性
    11         this.name = name;
    12     }
    13     public int getAge() {
    14         return age;
    15     }
    16     public void setAge(int age) {
    17         this.age = age;
    18     }    
    19     }
    20 
    21 public class Student extends Person{
    22     private String school;
    23     public Student() {
    24         System.out.println("子类构造方法");
    25     }
    26     public String getSchool() {
    27         return school;
    28     }
    29     public void setSchool(String school) {
    30         this.school = school;
    31     }
    32 
    33 public class Demo {
    34     public static void main(String[] args) {
    35         Student stu = new Student();
    36         stu.setName("张三");
    37         stu.setAge(23);
    38         stu.setSchool("云南大学");
    39         System.out.println("姓名:"+stu.getName()+"年龄:"+stu.getAge()+"学校:"+stu.getSchool());
    40     }
    41 }

    运行结果:
    父类构造方法
    子类构造方法
    姓名:张三年龄:23学校:云南大学

     

    方法的覆写

    所谓方法的覆写就是在子类中定义了与父类同名的方法,但是在方法覆写是必须考虑权限问题,即被子类覆写的方法不能有比父类更加严格的访问权限

    (即:private、default、public;这三种访问权限的大小关系private<default<public)

    所以父类中定义的方法是public,子类覆写的方法也必须是public

     1 class Person{
     2     void print(){    //定义一个默认访问权限的方法
     3         System.out.println("父亲的方法");
     4     }
     5 }
     6 class Student extends Person{
     7     public void print() {            //覆写父类方法,扩大访问权限public
     8         System.out.println("儿子覆写过的方法");
     9     }
    10 }
    11 public class Demo{
    12     public static void main(String[] args) {
    13         new Student().print();
    14     }
    15 }

    运行结果:
    儿子覆写过的方法

     与方法的覆写还有一个相似的是属性的覆盖

     1 class Person{
     2     public String info = "ABC";
     3 }
     4 class Student extends Person{
     5     public String info = "UFO";
     6     public void print() {        
     7         System.out.println("父类中的属性:"+super.info);//访问父类中的info属性
     8         System.out.println("子类中的属性:"+this.info);//访问子类中的info属性
     9     }
    10 }
    11 public class Demo{
    12     public static void main(String[] args) {
    13         new Student().print();
    14     }
    15 }

    运行结果:
    父类中的属性:ABC
    子类中的属性:UFO
     
  • 相关阅读:
    [转] c#有关winform的两个代码片段(多线程操作窗体控件与窗体淡入淡出效果)
    微软企业库源码解析——DAAB(三)DatabaseFactory(其余的Strategy)
    软件工程真的那么难么
    在VS2010中的注册微软企业库4.1
    对为什么使用访问器(getter),以及什么是继承的一点看法
    微软企业库源码解析——DAAB(四)DatabaseFactory小结
    Unity与ASP.NET的集成(官方方法)
    ASPxGridView导出pdf时中文乱码的解决方案
    删除WSS卸载后遗留的数据库
    让微软企业库中的Email Trace Listener使用需要身份验证的SMTP服务器
  • 原文地址:https://www.cnblogs.com/AloneZ/p/java3.html
Copyright © 2011-2022 走看看