3.Java基础知识巩固-继承/多态

本文详细介绍了Java中的面向对象特性,包括继承的概念,如何使用super关键字,重写父类方法的规则,多态的实现条件以及instanceof和类型转换的应用。此外,还讲解了static关键字的作用,内部类的特性,以及Error和Exception在异常处理中的区别。
摘要由CSDN通过智能技术生成

面向对象OOP

继承

  1. 子类继承父类:会拥有父类的全部方法和公有属性(私有的属性和方法无法继承);
  2. Java中,所有类都直接或间接的继承Object类(Object属于超类);
  3. 在子类中,通过super.xxx调用父类的属性和方法(但无法调用私有的属性和方法);子类中,this指当前对象,this.xxx调用自身的属性和方法;

super

  1. 父类的构造方法必须在子类构造方法的第一行;

    // 父类
    public class Person {
        public Person() {
            System.out.println("父类的构造方法");
        }
    }
    
    // 子类
    public class Student extends Person {
    
        public Student() {
            // 调用父类的构造器,必须要在子类构造器方法的第一行,
            // 如果是无参构造方法,可以不用写出,new子类对象时,默认会调用父类的构造发方法
    //        super();
            System.out.println("子类的构造方法");
        }
    
        public static void main(String[] args) {
            Student son = new Student();
        }
    }
    
    // 执行结果
    // 父类的构造方法
    // 子类的构造方法
    
  2. 如果父类中只有参构造方法,则在子类中必须通过super显式调用父类的有参构造;

    // 父类
    public class Person {     
        public Person(String name) {
            System.out.println("父类的有参构造方法:" + name);
        }
    
    }
    
    // 子类
    public class Student extends Person {
    
        public Student() {
            // 如果父类的构造方法为有参构造,则子类必须显示调用父类的无参构造
            super("richard");
            System.out.println("子类的构造方法");
        }
    
        public static void main(String[] args) {
            Student son = new Student();
        }
    }
    
    // 执行结果
    // 父类的有参构造方法:richard
    // 子类的构造方法
    

重写

  1. 子类继承父类后,可以重写父类的非静态方法,即子类的方法和父类一致,只是方法体不同;

    ①方法名必须相同

    ②参数列表必须相同

    ③修饰符:范围可以扩大,但不能缩小;public > protected > default > private

    ④抛出的异常:异常范围可以缩小,但不能扩大

  2. 重写只是针对非静态方法,跟静态方法无关;
    在这里插入图片描述

  3. 父类中的private的方法,子类无法重写;

多态

  1. 多态:父类的引用指向了子类的对象

    public class Person {
    
        public void test() {
            System.out.println("Person => test()");
        }
    }
    
    public class Student extends Person {
    
        public void test() {
            System.out.println("Student => test()");
        }
    
        public static void main(String[] args) {
            Student student = new Student();
    		// 父类的引用指向了子类的对象         
            Person person = new Student();
        }
    
    }
    
  2. 多态存在的条件:需要有继承关系,子类需要重写父类的方法

    ①static方法属于类,不属于实例对象,不能被重写;

    ②final修饰的属于常量,在常量池中,无法重写;

    ③private修饰的方法,也不能被重写;

instanceof 和 类型转换

  1. instanceof主要用来判断一个“对象”属于什么“类”

    ①属于二元运算符

    ②运算符左边是“对象”,右边是“类”;如 person instanceof Student;

    ③当左边的对象是右边类(或子类)所创建的对象时,返回 true;
    在这里插入图片描述

  2. 子类转换为父类,不需要强制转换,但可能会丢失一些方法(即向上转型)

  3. 父类转换为子类,需要强制转换;

static关键字

  1. 静态代码块,匿名代码块
    在这里插入图片描述

  2. 静态导入包

    import static java.lang.Math.random;
    
  3. 带final修饰的类,不能被继承

内部类

  1. 内部类可访问到外部内的私有属性;

    public class Outer {
        private int id = 10_0000;
        public void out() {
            System.out.println("外部的out方法");
        }
    
        public class Inner{
            public void in() {
                System.out.println("内部的in方法");
            }
            public int getId() {
                return id;
            }
        }
    
        public static void main(String[] args) {
            Outer outer = new Outer();
            Outer.Inner inner = outer.new Inner();
            System.out.println(inner.getId());
        }
    }
    

异常

Error

  1. VitualMachineError

    ①stackOverFlowError:栈溢出错误

    ②outOfMemoryError:内存溢出

  2. AWTError:跟图形化编程有关的错误

Exception

  1. 常见的异常如IOException,RuntimeException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值