zoukankan      html  css  js  c++  java
  • JAVA 继承

    一、继承

    1、概念:

    类的继承可以使用已有的类为基础派生出新的类。程序代码再利用。

    子类继承父类的成员变量和成员方法,同时可以修改父类的成员变量或者重写父类的方法,还可以添加新的变量或成员方法。

    2、优点:

    (1)子类直接拥有父类的所有属性和方法(除了privata)

    (2)实现代码复用

    3、子类的创建:

    通过 extend  关键字

    父类

    class Person{
        private String name;
        private int age;
        public Person(String name,int age)
        {
            this.name = name;
            this.age = age;
        }
        public void show()
        {
            System.out.println("姓名:"+name+" 年龄: "+age);
        }
    }
    

     其子类,学生类

    class Student extends Person
    {
        private String Depatmengt;
    
        public Student(String name, int age) {
            super(name, age);       //调用父类的有参构造方法
            // TODO Auto-generated constructor stub
        }
        public void setDepartment(String D)
        {
            this.Depatmengt = D;
            System.out.println(D+"系学生");
        }
        
    }
    

    子类的使用

    public class demo1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Student per1 = new Student("张三",15);
            per1.setDepartment("通信工程");
            per1.show();
            
        }
    }
    

     运行结果:

    通信工程系学生
    姓名:张三 年龄: 15

    说明:

    (1)子类的每个对象也是其父类的对象,这是继承性的“即是”性质。若Student继承Person,则Student即是Person,所以在任何可以使用Person实例的地方,都可以使用Student实例。反之则不然,父类对象不一定是它子类的对象。

    (2)Java程序在执行子类构造方法之前,会先自动调用父类中没有参数的构造方法,目的是为了帮助继承来自父类的成员做初始化操作。

    (3)子类不能继承父类中private成员

    (4)调用父类中特定的构造方法:

            通过 super() 来调用父类特定的构造方法(见上程序)。其中super() 可以重载。super()与this()功能相似。super() 与是从子类的构造方法调用父类的构造方法。 this()是同一个类中调用其他构造方法。super()与this()均必须放在构造方法的第一行。所以不能共存与同一构造方法。

            其构造方法调用顺序为:父类无参-->子类无参-->父类有参-->子类有参

    (5)当父类中的成员声明为 protected 时,可在子类中super.访问

    protected String name;
    

     访问父类属性

    System.out.println(super.name);
    

    二、覆盖(方法重写)

    1、定义:

        如果子类对父类的方法不满意,可以重写父类的方法,调用时优先使用子类的方法。

    2、语法规则:

    (1)返回值类型  (2)方法名  (3)参数类型和个数

    都要与父类继承的方法相同,才是方法的重写。否则将继承原来父类的方法。

     注:子类中不能覆盖父类中声明为final或者static的方法

    3、final关键字:

    父类中被声明为final的成员在子类中可被继承,但不能覆盖。

    若一个类被final修饰符缩修饰,则说明这个类不能再被其他类继承,该类不可能有子类,被称为最终类。

    三、Object类

    是所有类的父类,如果没有明确使用extends关键字确定标示继承另一个类,那么这个类默认继承Object类

    1、equals()方法:

    public boolean equals(Object obj)    功能说明:判断两个对象变量所指向的是不是同一个对象

    对于字符串的操作,Java在执行时会维护一个字符串池,对于一些可共享的字符串对象(如“”括起来的一个字符串),会先在字符串池中查找,如果有,就直接返回,而不是创建新的对象,以减少内存占用。

    (1)对于字符串变量,“==”运算符和equals()方法比较字符串时,比较方式不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址;而equals()方法比较的是两个字符串中所包含内容是否相同。

    (2)对于非字符串类型变量,二者都是用来比较其对象在内存中的首地址,即都是用来比较两个类类型的变量是否指向同一个对象。

              PS:Dog dog = new Dog();   中的dog只是一个指向dog对象的指针。

    (2)一般情况下,是比较image

    生成的代码:

    @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }//生成haxi码
    
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)             //如果是同一个对象,就是对的
                return true;
            if (obj == null)             //如果obj是空的,肯定不相等
                return false;
            if (getClass() != obj.getClass())    //判断类的对象是否相等
                return false;
            Animal other = (Animal) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    

    其中getClass()是得到类对象、

    2、toString()方法:

    返回对象的哈希code码,是唯一区分对象的标识,但对于我们没有用;可以通过重写toString()方法显示对象的属性。

    esplice提供的ISE方法:

    image

    image

    @Override
        public String toString() {
            return "Animal [age=" + age + ", name=" + name + "]";
        }
    

    于是乎,在mian中调用

    System.out.println(dog);

    结果为:

    image

  • 相关阅读:
    解决Prism的EventAggregator的事件订阅错误
    解决Prism中Region的GetView不起作用问题
    怎样成为一个高手
    排球比赛积分规则
    个人作业
    个人作业
    会议总结
    个人总结
    本周冲刺
    本周个人总结
  • 原文地址:https://www.cnblogs.com/Kevin127/p/4984139.html
Copyright © 2011-2022 走看看