Java学习笔记(三):面向对象

1.继承

  • 语法

    class 父类{}
    class 子类 extends 父类{}

    只能多层继承,不能多重继承,子类不能直接访问父类中的私有成员,可通过getter和setter方法获得

  • 子类对象new实例化(时)
  1. 会默认先调用父类的构造方法,再调用子类的构造方法去实例化所以,若父类和子类构造方法里含有输出语句,会在new时都打印
  2. 实际上,子类构造里隐含了super();调用了父类构造
  • 方法的覆写(“方法重写”)
  1. 子类覆写的方法不能拥有比父类方法更加严格的访问权限

    (如:父类--public ,子类也必须是--public )

  2. 父类方法被子类方法覆写后,如何访问该父类方法?

    ```

  3. 使用super();关键字即可,如:super.print();
  4. 在子类中,直接通过“super.方法()”形式即可访问父类中的方法

    ```

  5. .特例:private-->到default不算覆写,而是重新定义了一个新的方法!
  • 属性的覆写
  1. 继承后重新定义属性,同覆写方法一致
  2. 特别:在子类中:

    1.super.name-->访问父类中的name属性
    2.this.name-->访问“本“类中的name属性
  • 重载与覆写的区别
  1. 重载:

    01.方法名相同参数类型或个数不同
    02.对权限没有要求
    03.发生在同一个类中
  2. 覆写:
    01.方法名称,参数类型相同
    02.被覆写的方法(即子类方法)不能拥有(比父类方法)更严格的访问权限
    03.发生在继承类中
  • super关键字的作用
  1. super调用父类构造

    **同this一样,该语句必须放在构造方法的句首**
  2. this与super的区别:

this:

01.属性:调用本类中的属性,若没有,则从父类中寻找
02.方法:调用本类中的方法,若没有,则从父类中寻找
03.构造:调用本领构造,必须放在构造方法的首行
04.特殊:表示当前的对象

super:

01.属性:访问父类中的属性
02.方法:直接访问父类中的方法
03.构造:调用父类构造,必须放在子类的构造方法里的首行,如:super();
  • final关键字

注意:

1. 使用final声明的“类‘’不能有子类
2. 使用final声明的”方法”不能被子类所覆写
3. 使用final声明的变量即为常量,常量不可修改!
4. public static final同时声明的变量称为全局”常“量

2.抽象类

  • 定义规则

    ```

  1. 包含一个抽象方法的类必须是抽象类
  2. 抽象类和抽象方法都要使用abstract关键字声明
  3. 抽象方法只需声明而不需要实现
  4. 抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法
  5. 抽象类不能直接实例化,必须经由非抽象子类进行子类的实例化

    ```

  • 定义格式

    ```

  1. 抽象类:abstract class A {}
  2. 抽象方法:访问权限 abstract 返回值类型 方法名称(参数);

    //在抽象方法中是没有方法体的,不需要{}

  3. 子类的定义方法:class B extends A{ }

    在子类还必须覆写抽象类中的全部抽象方法

  4. 注意:抽象方法不要用private关键字声明,因为抽象方法必须被子类覆写
  5. 本质:抽象类比普通类多了个抽象方法,除了不能直接进行对象的实例化操作外其实并没有不同

    ```

    3.接口

  • 组成:
  1. 最重要的概念之一
  2. 由全局常量和公共的抽象方法组成
    interface 接口名称 {
    全局常量;
    抽象方法;
    }
  3. 此处的抽象方法必须定义为public 访问权限,不可更改!!!
  4. 当然,也可不写,默认public ,而不是default
  5. 通常,我们知道,全局常量是public static final,抽象方法是public abstract,但此处特殊,默认所以可省略该定义,实际上还有的
interface A{
    String s="作者"; //定义全局常量
    void print(); //定义抽象方法
    String getInfo(); //抽象方法不需{}
}
  • 接口的使用
  1. class 子类名 implements 接口A,接口B{ } !!!

    一个子类可以实现多个接口,class A implements B,C{}

  2. 实现后,必须覆写全部抽象方法
  • 接口的继承
  1. 一个接口不能继承抽象类,但一个接口允许继承多个接口

    interface A{} interface B{} interface C extends B,C{}
  2. 即一个接口可以同时继承多个接口,注意是继承extends!!!
  3. 接口不能实现接口,可以实现继承

    4.对象的多态性

  • 两种
  1. 方法的重载和覆写
  2. 对象的多态性

    01.向上转型:子类对象-->父类对象,会自动完成

    02.向下转型:父类对象-->子类对象,必须指定转型的子类类型

  • 格式
  1. 对象向上转型:父类 父类对象 =子类实例;

    如:B b =new B(); //子类实例化过程
      A a =b; //向上转型
  2. 对象向下转型:子类 子类对象 =(子类)父类实例;
    如:A a =new B(); //向上转型
    B b =(B)a; //向下转型:A-->B
  • 调用:调用子类自己的方法,一定只能用子类的实例化对象
  • 注意:!!!在进行对象的向下转型前,必须首先发生对象的向上转型,否则将异常
  • 读法:一个程序要从右到左:
    如:A a =new B();
    是B实例化了一个对象,该B的对象再向上转型成为了A的对象a

    5.instanceof关键字

  • 用于判断一个对象到底是谁哪个类的实例
  1. 对象 instanceof 类 -->返回boolean值
  • 用途:
  1. 如下:

    A a1=new B();
    A a2=new A();

    01.a1同时是A和B的对象-->通过子类实例化的对象同时也是父类和子类的实例,所以可以直接向上或向下转型

    02.a2只是A的对象 -->此时不能向下转型,因为没有先向上转型-->直接使用父类实例化本类对象,就不再是子类实例了,所以不能转型

  2. 向下转型前进行判断操作,避免异常

    ```

    A a=new B();

    if( a instanceof B){ }

原文地址:https://www.cnblogs.com/JZTX123/p/8972473.html

时间: 2024-10-15 09:45:54

Java学习笔记(三):面向对象的相关文章

黑马程序员——JAVA学习笔记三(面向对象)

1,    面向对象设计程序(oriented object pragraming)  ,其程序是有对象组成,只要对象能满足要求,就不需要关心其功能的具体实现.面向对象的特征:封装(encapsulation)继承(inherence)多态(polymorphism). 2,    类是对事物的属性和行为的描述,构造对象的模板和蓝图.对象是类的实例,它具有三个特征:行为(behavior)状态(state) 对象标示(identity如何辨别具有相同状态和行为的对象).成员函数默认有一个隐含参数

java学习笔记之面向对象static,final关键字

java学习笔记之面向对象static,final关键字 一.static关键字 1.概述: static静态的,被static修饰的成员属于类,不属于单个对象,被所有对象所共享,存在静态区中,静态的成员优先于对象加载到内存中. 2.statc修饰成员的使用方式:(被static修饰的成员变量有默认值) /* 1.可以通过对象直接使用,不推荐使用 2.通过类名调用静态成员 类名.静态成员变量 类名.静态成员方法 */ 3.static的特点 /* 1.在同一个类中,静态成员只能访问静态成员,非静

Java学习笔记<3>面向对象相关

面向对象的基本思想 从现实世界客观存在的事务出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式,如抽象.分类 继承.聚合.多态等. 类和对象的关系 对象中存储了类规定的数据类型,并且对象可以调用类的方法. java面向对象 <1>对象是java程序的核心,一切皆对象. <2>对象可以看成静态属性(成员变量)和动态属性(方法)的封装体. <3>类是创新同一类型对象的模版,定义了该类型对象应具有的成员变量及方法. 类的定义 成员变量可以用java语言的任何一种

疯狂java学习笔记之面向对象(三) - 方法所属性和值传递

方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调用者) 1 public class MathTest{ 2 public static void main(String[] args){ 3 System.out.println(Math.sin(1.57)); 4 System.out.println(Math.sin(Math.PI/2))

疯狂java学习笔记之面向对象-定义类、方法、构造器

Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. java程序中,类是最小的程序单位 - 所有的java程序都必须从定义类开始 定义类的语法格式: [修饰符]  class  类名{ //0 ~ N 个 Field 定义 //0 ~ N 个 方法定义 //0 ~ N个 构造器定义 } 一个类中最多只能出现五种成分:Field.方法.构造器 一个类最常见

【原】Java学习笔记019 - 面向对象

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 仔细想一想,Animal应该是一个抽象的概念,相对于Animal来说,狗才是具体的概念 6 // Animal的行为也应该算是一个抽象的行为 7 8 // Java中对于这些抽象的概念或是抽象的行为,提供了一个关键字 abstract 来进行修饰 9 10 // 关键字 abstract用在类上,

【JAVA学习笔记】面向对象

编程语言的发展 面向过程的设计思想 面向对象的设计思想 对象和类的概念 类之间的关系 对象和引用 Java类的定义 构造函数 对象的创建和使用 this关键字 static关键字 package和import语句 访问控制 类的继承 方法的重写 final关键字 object类 对象转型 多态 抽象类 接口 编程语言的发展 机器语言 汇编语言 高级语言–面向过程的语言 面向对象的语言 面向过程的思想和面向对象的设计思想 面向对象思维: 合适的方法出现在合适类中 在问题域中,不再考虑一步一步的过程

java学习笔记之面向对象接口

面向对象接口总结 接口理解: 接口是功能的集合,接口的定义也使用.java文件,编译之后也产生.class文件.类的定义使用class  ,而接口的定义使用interface: 定义格式: 1 public interface 接口名{ 2 //常量定义格式:public static final 常量名(一般是大写) 3 成员变量->常量 4 //抽象方法定义:public abstract 返回值类型 方法名(参数列表) 接口中的方法全部是抽象方法 5 成员方法->抽象方法 6 } 7 /

java学习笔记之面向对象多态

面向对象三大特性之多态 一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同样可以描述一个事物的多种形态,java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口) 变量赋值. 父类的引用变量指向子类对象.多态的前提需要有继承关系或者是实现关系,否则没法完成多态.在使用

【原】Java学习笔记014 - 面向对象

1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 面向对象思想 6 7 // 回顾编程语言思想进化之路:从面向过程到面向对象 8 9 // 面向过程 10 // 举例: 11 // 1.冰箱门打开 12 // 2.大象放进去 13 // 3.冰箱门关上 14 // [面向过程的思路的着眼点在于动作的功能,思考打开.放入.关闭均为动作] 15 16