美文网首页
2.3 继承 (面向对象)

2.3 继承 (面向对象)

作者: 夏沫xx | 来源:发表于2016-09-22 16:42 被阅读0次

    1、Java中的继承

    • 继承是类与类的一种关系
      Java中的继承是单继承的,即每个子类只有一个父类
    • 继承的好处
      子类拥有父类的所有属性和方法,但其修饰符不能是private
      代码的复用
    • 语法规则
      class 子类 extends 父类
      如:class dog extends animal{
      ......
      }

    2、Java中的方法重写

    • 什么是方法的重写
      如果子类对继承父类的方法部门满意,是可以重写父类继承的方法的,当调用方法是会优先调用子类的方法
    • 语法规则
      1、返回值类型
      2、方法名
      3、参数类型及个数
      以上都要与父类继承的方法相同,才叫方法的重写

    3、Java中的继承初始化顺序

    继承的初始化顺序

    • 初始化父类再初始化子类
    • 先执行初始化对象中属性,再执行构造方法中的初始化
    package exp;
    public class animal {
        public int age=10;
        public String name;
        public void eat(){
            System.out.println("动物具有吃东西的能力");
        }
        public animal(){
            System.out.println("animal 类执行了");
            age=20;
        }
    }
    
    package exp;
    public class dog extends animal {
        public dog(){
            System.out.println("dog 类执行了");
        }
    }
    
    package exp;
    public class Initail {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            animal a=new animal();
            System.out.println("animal age:"+a.age);
            dog d=new dog();
            d.age=10;
            d.name="赵欢";
            d.eat();
        }
    }
    
    Paste_Image.png
    Paste_Image.png

    4、Java中的final的使用

    final关键字:可以修饰类、方法、属性、变量

    • final修饰类,则该类不允许被继承
    • final修饰方法,则该方法不允许覆盖(重写)
    • final修饰属性,则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
    • final修饰变量,则该变量的值只能赋一次值,即常变量

    5、Java中的super的使用

    super关键字:在对象内部使用,可以 代表父类对象

    • 访问父类的属性
      super.age
    • 访问父类的方法
      super.eat()
    package exp;
    public class animal {
        public int age=10;
        public String name;
        public void eat(){
            System.out.println("animal吃东西");
        }
        public animal(){
            System.out.println("animal 类执行了");
        }
    }
    
    package exp;
    public class dog extends animal {
        public int age=20;
        public void eat(){
            System.out.println("dog吃骨头");
        }
        public dog(){
            System.out.println("dog 类执行了");
        }
        public void method(){
            super.eat();     //必须在子类的构造方法的第一行
            System.out.println(super.age);
        }
    }
    
    package exp;
    public class Initail {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            dog d=new dog();
            d.method();
        }
    }
    
    • super的应用
      子类的构造过程当中必须调用其父类的构造方法,则系统默认调用父类无参的构造方法;如果显示的调用构造方法,必须在子类的构造方法的第一行;如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错
      public dog(){
      // super();隐式显示
      System.out.println("dog 类执行了");
      }

    6、Java中的object类

    object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承object类
    object类中的方法,适合所有的子类
    -####方法
    1、toString()方法
    在object类里面定义toString()方法的时候返回的对象的哈希code码(对象地址字符串)
    可以通过重写toString()方法表示出对象的属性

    package exp;
    public class Initail {
           public static void main(String[] args) {
        // TODO Auto-generated method stub
        dog d=new dog();
        System.out.println(d);
        }
    }
           //exp.dog@15db9742此处输出的是dog对象在内存中的地址
    

    重写toString()方法在eclipse的source菜单下,自动生成

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

    2、equals()方法
    比较的是对象的引用是否指向同一块内存地址。一般情况下比较两个对象时比较他的值是否一致,所以要进行重写

    package exp;
    public class Initail {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            dog d=new dog();
            d.age=15;
            dog d2=new dog();
            d2.age=15;
            if(d.equals(d2)){
                System.out.println("两个对象是相同的");
            }else{
                System.out.println("两个对象是不相同的");
            }
        }
    }
    
    public class game{
        public static void main(String[] args){
                 Scanner in=new Scanner(System.in);
                 System.out.println("请输入你要找的学生的姓名:");
                 String name=in.next();
                 String[] arr={"张三","李四","王二","麻子","壁虎"};
                 boolean flag=false;
                 for(int i=0;i<arr.length;i++){
                        if(name.equals(arr[i])){
                               flag=true;
                               break;
                        }
                 }
                 if(flag==true){
                        System.out.println("找到了");
                 }else{
                        System.out.println("没有这个学员存在");
                 }
              }
    

    判断两个对象是否相等,在eclipse里的source里可以自动生成

    public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;//得到一个类对象,即类的代码信息
            dog other = (dog) obj;
            if (age != other.age)
                return false;
            return true;
        }
    

    相关文章

      网友评论

          本文标题:2.3 继承 (面向对象)

          本文链接:https://www.haomeiwen.com/subject/lujuettx.html