Java核心编程总结(一、继承)

0.写在前面

  1. 本笔记用作复习查看用,基础完整总结部分,基础不牢,地动山摇!
🔥Java帝国之行🔥地址
Java核心编程总结(一、继承) 🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209463
Java核心编程总结(二、抽象类与接口)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209487
Java核心编程总结(三、多态与内部类)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209507
Java核心编程总结(四、异常与线程) 🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209529
Java核心编程总结(五、线程池与死锁)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209580
Java核心编程总结(六、常用API与集合)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209607
Java核心编程总结(七、Stream流)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209624
Java核心编程总结(八、IO输入输出流)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209648
Java核心编程总结(九、File文件类)🔥https://blog.csdn.net/Augenstern_QXL/article/details/116209674
Java核心编程总结(十、反射) 🔥https://blog.csdn.net/Augenstern_QXL/article/details/117744497

1.基础回顾+面试

1.1类中成分

  1. 成员变量(Field:描述类和对象的属性信息的)
  2. 成员方法(Methpd:描述类或者对象的行为信息的):包括实例方法,静态方法,抽象方法,getter setter 方法
  3. 构造器(Constructor:初始化一个类的对象并返回引用)
    • 默认无参构造器:一个类默认会自带一个无参构造器,即使不写它也存在,但是如果一个类它写了一个构造器,那么默认的无参构造器就被覆盖了!
    • 有参构造器
  4. 代码块
  5. 内部类
/*
   javaBean类: 封装数据
*/
public class Student {
    // 两个成员变量 私有
    private String name;
    private int age;
    
    
    // 无参构造器
    public Student(){
        
    }
    
    
    // 有参数构造器
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    // 成员方法: setXX \ gerXX
    public void setName(String name){
        this.name = name;        
    }
    public String getName(){
        return name;
    }
    
    
    public void setAge(int age){
        this.age = age
    }
    public int getAge(){
        return age;
    }
    public void show(){
        System.out.print;n(name + "..." + age);
    }
    
}

1.2this关键字

  • this关键字可以用在实例方法和构造器中
    • this关键字用在方法中,谁调用这个方法,this就代表谁
    • this关键字用在构造器上,代表了构造器正在初始化那个对象的引用
/*
   javaBean类: 封装数据
*/
public class Student {
    // 两个成员变量 私有
    private String name;
    private int age;
    
    
    // 无参构造器
    public Student(){
        
    }
    
    
    // 有参数构造器中可以用 this 关键字
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    // 实例方法中可以用 this 关键字
    // 成员方法: setXX \ gerXX
    public void setName(String name){
        this.name = name;        
    }
    public String getName(){
        return name;
    }
    
    
    public void setAge(int age){
        this.age = age
    }
    public int getAge(){
        return age;
    }
    public void show(){
        System.out.print;n(name + "..." + age);
    }
    
}

1.3static关键字

– 按照有无static修饰,成员变量和方法可以分为

  1. 成员变量

    1. 静态成员变量(类变量)

      static修饰的成员变量称为静态成员变量,也叫类变量,属于类本身,直接用类名访问即可

    2. 实例成员变量

      static修饰的成员变量称为实例成员变量,属于类的每个对象的,必须用类的对象来访问

  2. 成员方法

    1. 静态方法

      static修饰的成员方法称为静态方法,也叫类方法,属于类本身的,直接用类名访问即可

    2. 实例方法

      static修饰的成员方法称为实例方法,属于类的每个对象的,必须用类的对象来访问

  3. 成员变量的访问语法

    1. 静态成员变量访问:
      • 类名.静态成员变量
      • 对象.静态成员变量(也可以访问,但是不推荐)
    2. 实例成员变量的访问:
      • 对象.实例成员变量
public class Student {
    // 1.静态成员变量: 有static修饰,属于类本身,直接用类名访问即可!
    public static String schoolName = "中国";
    // 2.实例成员变量: 无static修饰,属于类的对象,必须用对象访问
    private String name;
    private int age;

    public static void main(String[] args){
        // 1.类名.静态成员变量
        System.out.println(Student.schoolName);
        // 注意:同一个类中访问静态成员变量可以省略类名不写
        System.out.println(schoolName);


        // 2.对象.实例成员变量
        Student s1 = new Student();
        s1.name = "孙悟空";
        System.out.println(s1.name);
        // 3.对象.静态成员变量(不推荐)
        System.out.println(s1.schoolName);
		// 静态成员变量属于类,直接用类名访问即可
    }
}

1.4继承的概述

  • 继承是子类到父类的一种关系
  • 子类继承了一个父类,子类就可以直接得到父类的属性(成员变量)和行为(方法)了
  • 在java中继承是 “is a” 的关系。Cat extends Animal : 猫是一个动物
  • 在java中,子类是更强大的,子类不仅继承了父类的功能,自己还可以定义自己的功能

格式:

子类 extends 父类 {
    
}

1.5子类不能继承父类的内容

  • 子类继承父类,子类就得到了父类的属性和行为,但是并非所有父类的属性和行为等子类都可以继承
  • 子类不能继承父类的构造器:子类有自己的构造器(没有争议)
public class ExtendsDemo {
    public static void main(String[] args) {
        // Cat c = new Cat();
    }

class Cat extends Animal{

}
class Animal{
		// 父类中的静态成员方法
        private  void run(){

        }
}

1.6继承后成员变量的访问特点

就近原则:子类有就找子类,子类没有找父类,父类没有就报错!

  • this 代表了当前对象的引用,可以用于访问当前子类对象的成员变量
  • super 代表了父类对象的引用,可以用于访问父类中的成员变量
public class TestDemo {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.show();
    }

}
class Animal{
    public String name = "动物名称";
}

class Cat extends  Animal {
    public String name = "子类名称";
    public void show() {
        String name = "局部名称";
        System.out.println(name);  //局部名称
        System.out.println(this.name);  //子类名称
        System.out.println(super.name); //父类名称
    }

}

1.7继承后成员方法的访问特点

  • 子类对象优先使用子类已有的方法

1.6继承后方法重写

  • java建议在重写的方法上面加一个@override 注解
  • 方法一旦加了这个@override 注解,那就必须是成功重写父类的方法,否则报错!

方法重写的规范

  1. 子类重写方法的名称和形参列表必须与父类被重写方法一样
  2. 子类重写方法的返回值类型声明要么与父亲一样,要么比父类方法返回值类型范围更小
  3. 子类重写方法的修饰符权限应该与父类被重写方法的修饰符权限相同或者范围更大
  4. 子类重写方法申明抛出的异常应该与父类被重写方法申明抛出的异常一样或者范围更小

小结

  1. 方法重写是子类重写一个与父类申明一样的方法覆盖父类的方法
  2. 方法重写要加@override 注解
  3. 方法重写的核心要求:方法名称,参数列表必须与被重写方法一致!

扩展

  • 静态方法和私有方法是否可以被重写?

答:都不可以,加上@override会报错

1.7继承后构造器特点

  • 子类继承父类,子类的全部构造器默认会先访问父类的无参构造器,再执行子类自己的构造器
  1. 为什么子类的构造器会先调用父类的构造器?

    答:1. 子类的构造器的第一行默认有一个super()调用父类的无参构造器,写不写都存在

    ​ 2.当我们调用子类构造器初始化子类对象数据的时候,必须先调用父类构造器初始化继承自父类的属性和行为(先有爸爸,后有儿子)

1.8this和super

  • this代表了当前对象的引用(继承中指代子类对象)
    • this.子类成员变量
    • this.子类成员方法
    • this(....):可以根据参数匹配访问本类中其他构造器
  • super代表了父类对象的引用(继承中指代了父类对象空间)
    • super.父类成员变量
    • super.父类的成员方法
    • super(....):可以根据参数匹配访问父类的构造器

注意:

  • this(...)借用本类其他构造器
  • super(...)调用父类的构造器
  • this(...)和super(...)必须放在构造器的第一行,否则报错
  • 所以this(...)super(...)不能同时出现在构造器中!!

1.9继承特点

继承的特点:

  1. 单继承: 一个类只能继承一个直接父类
  2. 多层继承:一个类可以间接继承多个父类(C继承B,B继承A)
  3. 一个类可以有多个子类(C继承B,D也继承B,B就有了C,D两个子类)
  4. 一个类要么默认继承了Object类,要么间接继承了Object类,Object类是Java中的祖宗类

1.10引用类型作为方法参数和返回值

– 引用类型作为java的数据类型,自然可以作为方法的参数类型和返回值类型

– 除了基本数据类型就是引用数据类型了

  • 基本数据类型
    • byte,short,int,long,char,boolean,float,double
  • 引用类型
    • 就是我们自己创建的类型
    • 接口
    • 数组

2.面试常考

2.1八种访问形式问答

  1. 实例方法是否可以直接访问实例成员变量?

    答:可以的,因为它们都属于对象

  2. 实例方法是否可以直接访问静态成员变量?

    答:可以的,静态成员变量可以被共享访问

  3. 实例方法是否可以直接访问实例方法?

    答:可以的,实例方法和实例方法都属于对象

  4. 实例方法是否可以直接访问静态方法?

    答:可以的,静态方法可以被共享访问

  5. 静态方法是否可以直接访问实例变量?

    答:不可以,静态方法属于类,实例变量属于对象,实例变量必须用对象访问

  6. 静态方法是否可以直接访问静态变量?

    答:可以的,静态成员变量可以被共享访问

  7. 静态方法是否可以直接访问实例方法?

    答:不可以,实例方法必须被对象访问

  8. 静态方法是否可以直接访问静态方法?

    答:可以的,静态方法可以被共享访问

2.2继承

  1. 子类中不能继承父类东西是什么?

    答:子类不能继承父类的构造器,子类有自己的构造器

  2. 子类是否可以继承父类的私有成员(私有成员变量,私有成员方法)?

    答:有争议,我认为子类是可以继承父类的私有成员的,只是不能直接访问而已

  3. 子类上是否可以继承父类的静态成员?

    答:子类可以继承父类的静态成员。

2.3重写

  1. 静态方法和私有方法是否可以被重写?

    答:不可以,加上@Override会报错

2.4继承后构造器特点

  1. 为什么子类的构造器会调用父类的构造器

    答:子类的构造器第一行默认有super()调用父类的无参构造器,写不写都存在

2.5单继承

  1. 为什么Java是单继承的?

答: 反证法

// 假如Java可以多继承,请看如下代码
class A{
    // 成员方法
    public void test(){
        System.out.println("A");
    }
}

class B{
    // 成员方法
    public void test(){
        System.out.println("B");
    }
}
class C extends  A,B{
    public static void main(String[] args){
        C c = new C();
        c.test(); //出现了类的二义性!所以Java不能多继承!!
    }
}
  • 41
    点赞
  • 125
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Java核心技术》出版以来一直畅销不衰,深受读者青睐,每个新版本都尽可能快地跟上Java开发工具箱发展的步伐,而且每一版都重新改了部分内容,以便适应Java的最新特性。本版也不例外,它反映了Java SE 6的新特性。全书共14章,包括Java基本的程序结构、对象与继承、接口与内部、图形程序设计、事件处理、Swing用户界面组件、部署应用程序和Applet、异常日志断言和调试、泛型程序设计、集合以及多线程等内容。. 全书对Java技术的阐述精确到位,叙述方式深入浅出,并包含大量示例,从而帮助读者充分理解Java语言以及Java库的相关特性。对于想将Java应用于实际项目中的程序员来说,《Java核心技术——基础知识》修订版是一本权威性的指导书籍。对于Java SE 6平台的全部更新,这本实用的教程和可靠的参考书通过大量测试过的示例说明了最重要的语言特性和库特性。示例程序经过精心地设计,不但具有实用价值,而且易读、易理解,可以作为自己编程序的良好开端。.. 卷I试图让读者快速地了解Java SE 6的新特性,并帮助有效地从Java早期版本升级到最新版本,或从一种其他的语言变换为使用Java语言。作者十分注重Java语言的基本概念以及用户界面程序设计基础。下面是本卷详细介绍的主要内容: Java语言基础知识面向对象程序设计接口与内部事件监听器模型 Swing图形用户界面程序设计打包应用程序异常处理登陆与调试泛型化程序设计集合框架多线程... 【作译者介绍】 本书提供作译者介绍 Cay S. Horstmann参与编《Core JavaServer Faces》第2版(Prentice Hall, 2007)。Cay是圣何塞州立大学计算机科学系教授、Java的倡导者,并经常在计算机会议上讲演。. Cray Cornell已经编并教授程序设计专业课程20余年,是Apress的创始人。他撰的程序设计专业书籍十分畅销,是Jolt Award的最终获奖者之一,并通过Visual Basic资料赢得了Readers Choice。...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命是有光的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值