美文网首页
[Java基础] 类,对象,多态,继承笔记

[Java基础] 类,对象,多态,继承笔记

作者: 杨山炮 | 来源:发表于2018-03-11 22:41 被阅读0次
1 类和对象的理解
  • 类是同一类事物的抽象描述,有点像模板。
  • 对象是对这一类事物的个体实例化。
2 接口和多态理解
  • 接口就是一些方法特征的集合(接口是对抽象的抽象)
  • 类对这些特征集合(接口)的不同实现方式即为多态

Tips:接口在程序开发过程中是对对象的功能提供扩展,定义时需要interface关键字,抽象类是对一类事物的抽象归类,该类中方法功能声明相同,但方法功能主体不同,是对。定义时需要abstract关键字

3 继承的好处
  • 提高了代码的复用性,节省维护成本
  • 继承的出现让类与类之间产生了关系,提供了多态的前提

Tips:在Java中只有单继承和多实现,没有多继承(指的是一个类只能有一个直接父类,并不表示不能多层级继承)

4 继承中变量和方法的特点

1.0 子父类成员变量的特点
     父类中的成员变量是非私有的,子类中可以直接访问,若父 类中的成员变量私有了,子类是不能直接访问的。
      子父类出现同名变量时在子类中可以通过super.父类属性和方法,通过this关键字区别子类自身的同名变量。

2.0 子父类成员方法的特点
      优先使用子类方法,子类没有就使用父类,如果出现同名方法就会出现方法重写
     方法重写注意事项:子类的方法权限(public,default,protected,private)必须高于父类才行,否则编译报错。

5 抽象类定义,特点

     定义:抽象类是Java类中的一种,他是在Java类的基础上对类中的方法进行深度提取,对类中的方法共性只提取出方法声明,不对方法的主体内容进行操作。是对一类事物的共性方法声明,不是对共性方法功能描述

  • 抽象类不可以直接创建对象
  • 抽象类和抽象方法都必须有abstract关键字声明
  • 只有覆盖了抽象类中所有的抽象方法后,其子类才可以创建对象
6 接口的概念,用法,特点

     概念:接口是抽象类的抽象,是功能的集合,在程序开发过程中主要是为对象提供扩展功能。
     
定义:

public interface <interface_name>{
  abstract methods1(){}
  abstract methods1(){}
}

Tips:
接口中的方法均为公共访问的抽象方法,接口中无法定义普通的成员变量,但是可以是public static final <var_type> <var_name>,所以接口中的变量也是常量,子类必须实现接口中所有方法才能实例化。

实现

class <class_name> implements <interface_name>(){
      OverRide interface's methods;
}

     在类实现接口后,该类就会将接口中的抽象方法继承过来,此时该类需要重写所有抽象方法,完成具体的逻辑。

7 多态

     Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值,多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

多态成员方法的注意事项:
     当子父类中出现同名的成员方法时,编译时期:参考引用变量所属的类,如果fulei类中没有调用的方法,编译失败。运行时期:参考引用变量所指的对象(子类)所属的类,并运行对象所属类中的成员方法。简而言之:编译看左边,运行看右边。

多态成员变量的注意事项:
     当子父类中出现同名的成员变量时,多态调用该变量时:编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。运行时期:也是调用引用型变量所属的类中的成员变量。简单记:编译和运行都参考等号的左边。编译运行看左边。

多态转型
向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,
     父类类型 变量名 = new 子类类型();多态本身就是向下转型。

向下转型: 一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,
     子类类型 变量名 = (子类类型) 父类类型的变量;

     多态转型的好处与弊端:当父类的引用指向子类对象时,就发生了向上转型,即把子类类型对象转成了父类类型。向上转型的好处是隐藏了子类类型,提高了代码的扩展性。但向上转型也有弊端,只能使用父类共性的内容,而无法使用子类特有功能,功能有限制。
     当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。当要使用子类特有功能时,就需要使用向下转型(这里在多态中的方法使用上记得看懂   “多态成员变量的注意事项”)

8 封装、继承、多态的作用
  • 封装:把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式
  • 继承:子类会自动拥有父类所有可继承的属性和方法。
  • 多态:配合继承与方法重写提高了代码的复用性与扩展性;如果没有方法重写,则多态同样没有意义。
9 this关键字在多个构造函数之间的相互调用
除了构造函数的相互调用之外,this关键字还可以区别局部变量和成员变量 this关键字在Java构造函数之间的调用.png
10 super关键字在子父类之间的使用
调用本类中的构造方法
this(实参列表);
调用父类中的空参数构造方法
super();
调用父类中的有参数构造方法
super(实参列表);

     Tips:如果子类的构造方法第一行写了this调用了本类其他构造方法,那么默认的super调用父类的语句是不会默认存在的,因为this()或者super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
     类中的构造方法默认第一行都有隐式的super()语句,在访问父类中的空参数构造方法。所以父类的构造方法既可以给自己的对象初始化,也可以给自己的子类对象初始化。
     如果默认的隐式super()语句在父类中没有对应的构造方法,那么必须在构造方法中通过this或者super的形式明确要调用的构造方法。

注意事项:

  • super: 指的是父类的存储空间(理解为父类的引用)
    调用父类的成员变量:
    super.成员变量;
    调用父类的构造方法:
    super(参数);
    调用方法的成员方法:
    super.成员方法();

  • 继承中的构造方法注意事项:
    1.如果我们手动给出了构造方法,编译器不会在给我们提供默认的空参数构造方法, 如果我们没写任何的构造方法,编译器提供给我们一个空参数构造方法

    1. 在构造方法中,默认的第一条语句为 super();
      它是用来访问父类中的空参数构造方法,进行父类成员的初始化操作
    2. 当父类中没有空参数构造方法的时候,怎么办?
      a: 通过 super(参数) 访问父类有参数的构造方法
      b: 通过 this(参数) 访问本类中其他构造方法
      注意:[本类中的其他构造方法已经能够正常访问父类构造方法]
    3. super(参数) 与 this(参数) 不能同时在构造方法中存在
11 final&static关键字的特点
  • final&static关键字的特点
    • final修饰的类不可以被继承,但是可以继承别的类
    • final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加fina
    • final修饰的变量称为常量,这些变量只能赋值一次。
    • 引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改
    • 修饰成员变量,需要在创建对象前赋值,否则报错。可以在创建对象时所调用的构造方法中,为变量n赋值* static关键字的特点
    • 被static修饰的成员变量属于类,不属于这个类的某个对象
    • 静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。
    • 同一个类中,静态成员只能访问静态成员
    • 多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量
    • main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中
匿名对象与内部类

匿名对象的特点:

  • 创建匿名对象直接使用,没有变量名
  • 匿名对象在没有指定其引用变量时,只能使用一次。
  • 匿名对象可以作为方法接收的参数、方法返回值使用

内部类的分类

  • 成员内部类
class 外部类 { 
    修饰符 class 内部类 {
        //其他代码
      }
}
  • 局部内部类
class 外部类 { 
    修饰符 返回值类型 方法名(参数) {
            class 内部类 {
                //其他代码
             }
      }
}

匿名内部类作用:匿名内部类是创建某个类型子类对象的快捷方式

//已经存在的父类:
public abstract class Person{
    public abstract void eat();
}
//定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
Person  p = new Person(){
    public void eat() {
        System.out.println(“我吃了”);
}
};
//调用eat方法
p.eat();
//匿名内部类的实现
//前提:必须有继承或者接口,new的不是子类而是父类或者接口
new 父类或接口(){
    //进行方法重写
};
访问修饰符和代码块

修饰符: 编写的类、方法、成员变量的权限访问

  • 要想仅能在本类中访问使用private修饰;
  • 要想本包中的类都可以访问不加修饰符即可;
  • 要想本包中的类与其他包中的子类可以访问使用protected修饰
  • 要想所有包中的所有类都可以访问使用public修饰。
  • 注意:如果类用public修饰,则类名必须与文件名相同。一个文件中只能有一个public修饰的类。

代码块分类:局部代码块,构造代码块,静态代码块

局部代码块是定义在方法或语句中
class Demo{
    public static void main(String[] args)  {
        {
                 int x = 1;
                 System.out.println("普通代码块" + x);
        }
        int x = 99;
        System.out.println("代码块之外" + x);
    }
}
构造代码块是定义在类中成员位置的代码块
1. 优先于构造方法执行,构造代码块用于执行所有对象均需要的初始化动作
2. 每创建一个对象均会执行一次构造代码块。
public class Person {
    private String name;
    private int age;
    
     //构造代码块
    {
        System.out.println("构造代码块执行了");
    }
    Person(){
        System.out.println("Person无参数的构造函数执行");
    }
}
静态代码块是定义在成员位置,使用static修饰的代码块。
1. 它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行。
2. 该类不管创建多少对象,静态代码块只执行一次。
3. 可用于给静态变量赋值,用来给类进行初始化。
public class Person {
    private String name;
    private int age;
     //静态代码块
    static{
        System.out.println("静态代码块执行了");
    }
}

上一篇:Java基础笔记——环境搭建&变量
下一篇:Java常用API

相关文章

  • [Java基础] 类,对象,多态,继承笔记

    1 类和对象的理解 类是同一类事物的抽象描述,有点像模板。 对象是对这一类事物的个体实例化。 2 接口和多态理解 ...

  • 学习路线

    Java Se基础 Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • 第一天面向对象OOP

    java基础OOP第一天总结_12_03 1,继承2,抽象类3,接口4,多态 面向对象的继承问题 面向对象的抽象类...

  • 对像和类

    Java 对象和类 多态 继承 封装抽象 Java对象和类 类对象实例方法消息解析代码: 11 运行结果: 小狗的...

  • Java知识积累

    java基础知识记忆 1、类和对象,实体类等 2、类的继承和多态override和overload 重写和重载的...

  • 008.java 对象和类

    Java 对象和类 Java作为一种面向对象语言。支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法...

  • 04.Java 对象和类

    Java 对象和类 Java作为一种面向对象语言。支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法...

  • 多态

    一、多态 1、引用多态父类的引用指向本类的对象父类的引用指向子类的对象 继承是实现多态的基础 2、方法多态创建本类...

  • Java技术栈梳理

    Java语言 基础, 基本类型, 操作符, 运算符, 表达式 面向对象, 类, 继承, 多态, 重写, 重载 S...

网友评论

      本文标题:[Java基础] 类,对象,多态,继承笔记

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