Java基础补习Day2

一、面向对象的介绍

从以前面向过程的编程方式,我们编写程序先整理流程图,以流程图来编写程序
但是面向对象的编程方式,首先我们不再去整理业务流程,而是先找寻业务执行主体。进而创建业务主体。 然后整个程序都由这些业务主体自主完成

注意:一个空的对象占8个字节,增加一个属性,就增加这个属性所占的空间大小,增加一个int型的变量,就增加4个字节

eg.
/**
  *矩形是名称,也就是这个业务的执行主体,将它定义为类
  *属性与方法
  *业务主体所拥有的特性,我们设置为属性。主体有......
  *业务主体所拥有的功能,我们设置为方法。主体有什么功能
  */

二、面向对象的三大基本特征

1.封装

把具体的业务实现隐藏起来,公开统一的接口
封装的使用如下:
    class Student{
        private String name;
        private int age;
        private double weight;
        public void setAge(int a){
            if(a<0||a>100){
                a = 10;
            }
    }

2.继承

可以运用此语法让两个类产生关联。一般来说这两个类有一定的关系:A类属于B类

      2.1 语法格式:在A类声明后加上extends B这句话

            class A extends B {
                //子类特有的属性和方法
            }

      2.2 规则:         
          1.在子类中,会得到父类的所有成员(不包含构造器),即构造方法不能被继承,不能被重写
          2.子类构造器的第一行必须调用父类构造器
          3.如果父类含有空参构造器,子类构造器可以不写,以代表父类构造器
          4.重写父类方法,我们可以利用ecplice的快捷键快速完成方法的重写
          5.Java不支持多继承,只能单继承,这一点与C++不一样。一个类只能继承一个父类,所有类都直接或间接的继承Oject类。只是extends  Object 省略没有写

      2.3 方法重写的规则
            1)必须在继承关系的子类中
            2)重写的方法名、参数、返回值类型必须与父类相同
            3)私有方法不能继承因而也无法重写

         @Override
         这个是Java的注解,用于判断下面重写的方法是否符合重写的语法规则:与父类某方法具有相同的方法名、返回值类型、参数列表。返回值类型和参数的类型可以选其子类进行替换


补充:
this和super两个关键词的使用:     

    this:本类对象
         作用:
            1、调用当前对象的成员
                    this.play();
                    this.num = 2;
                在本类的一个方法中,可以任意调用另外的方法。常见于通过this表明后面的变量是本类的成员变量,以区分同名的局部变量
            2、在构造器中调用本类其他构造器
                this();或者this(参数);
         注意:
            1.只能在构造方法中使用this调用其它构造方法,不能在成员方法中使用
            2.在构造方法中,使用this调用其它构造方法的语句必须位于第一行,只能出现一次。
            3.不能在一个类的两个构造方法中使用this互相调用

    super:父类对象:
         作用:
            1、调用当前对象的父类对象的成员
                    super.play();
                    super.num = 10;
            2、在构造器中使用,在子类构造器的第一行调用父类构造器

         注意:在本类构造器调用本类构造器的例子中,第一行是没有调用父类构造器的,父类构造器的调用在被调用的子类构造器中调用。

3.多态

类型或方法拥有多种状态。
  方法的多态;  方法重载
  类型的多态: 一个类型展现了另一个类型的形态,类型的多态一定是基于继承实现的

注意:引用,Java中所以变量都是引用,用于存放地址,Java中的数值和字符串常量是同一存放在常量池中,在常量池中,没有重复的常量。我们变量得到的某个常量的地址是一样的,所以我们通常使用==比较的变量中持有的地址,从未认定他们相等

  • 类型转换的隐式转换:
    1.基本数据类型:数值小的转换为数值大的类型,可以不明确写出类型转换
    2.引用类型:
    子类型在转换到父类型时,可以不明确写出类型转换
    当父类引用持有子类对象,想把父类引用转换回子类引用时,只能通过强制类型转换,而强制类型转化是有风险的,所以在转换前应该进行类型判定: 对象1 instanceof 对象2 ——-> 对象1是否属于对象2

注意:父类引用操作子类型对象,虽然这个对象在看上去,电脑会认定他是父类型,但是实质使用中,用的是子类型对象(主要在方法调用上)。

补充:方法重载和重写的区别

            位置  方法名 参数表    返回值     访问修饰符
  方法重写    子类  相同   相同     相同     不能比父类更严格
  方法重载    同类  相同   不同     无关         无关

三、抽象

将实现子类中的共同的功能总结出一个抽象方法(功能规范)

1. 抽象方法

定义格式:[修饰词] abstract(抽象修饰词)+返回值类型+方法名+(参数列表)
         public abstract void play(int i);
使用规则:
    1.抽象方法没有方法体,只能在抽象类或接口中定义抽象方法
    2.抽象方法必须在抽象类中
    3.抽象方法必须在子类中被实现,除非子类是抽象类

2. 抽象类

定义格式:和正常编写一个类唯一区别就是,抽象类在类声明时,在class之前带上abstract关键字
  • 抽象类不能被实例化对象,只能被子类继承
  • 我们的父类中有时候会有一些方法,一定要求子类去使用,但是我们又无法准确地为子类实现此功能,那么我们就要定义这个方法为抽象方法,要求子类按照我们设定的方法格式去实现此功能。

注意:抽象类可以拥有抽象方法也可以拥有实现方法,如果一个抽象类的子类依然是一个抽象类,那么这个子类可以选择实现此抽象方法,也可以选择不实现此抽象方法

3. 接口

Java中的一个语法规则,是Java类型定义的一个关键字
定义格式如下:
     public interface 接口名{
        //常量
        //抽象方法
     }

注意:
- 接口没有构造器
- 接口中无属性(成员变量),只能在类型中定义常量,e.g.(public static final) int i= 100;括号里面可以不写,Java编译器会自动添加
- 在接口中,只能定义抽象方法,不能实现该方法,可以不用public abstract修饰方法,但Java编译器自动为我们添加

  • 接口的意义:不能被实例化,不能直接创建对象,只能被子类实现
  • 实现接口的格式: implements 接口名

规则:
- 实现接口的类叫做接口的子类,这个接口叫做父接口。
- 一个子类可以的实现多个接口
- 这个子类可以是抽象类,也可以是普通类
- 子类可以获取父接口的常量与抽象方法,普通必须实现接口的抽象方法
- 接口可以继承另一个接口

4. 访问控制修饰词

4.1 修饰词、访问权限如下:
类型访问权限关键字
公开哪个包都可以使用,就算不在当前工程也一样public
受保护如果子类使用,可以无视子类所在的包protected
默认只能在本包中使用无关键字
私有只能在本类中使用private
访问修饰符     本类     同包  子类  其他
private        √
默认(无修饰符)   √      √
protected      √      √         √
public         √      √   √    √
4.2 包

包,java中管理源文件的语法规则就是包,在物理地址上也会进行划分。

  • 命名规则:公司域名倒置.项目组.项目名称:
    com.farsight.g1706.projectnanme
  • 位于每个源文件的第一行:
    package 当前包名;//用于明确当前源文件在哪个包中
  • 在java运行环境中,Java的虚拟机是通过包名+类名的形式确定我们的类,并加载到内存中,这样做的好处:一是方便管理代码,二是可以有效的区别不同包中的同名类型

  • 在使用不同包的类时,我们可以:
    1.在类名前,明确这个类的包名: 包名.类名
    2.在使用类名之前,在文件开头,package语句之后加入import语句;

四、static和final关键词的使用

1、静态修饰词 static

修饰的对象:
1. 修饰类:不能修饰直接写在源文件中的类,修饰内部类
1. 修饰属性:可以直接使用类名调用
1. 修饰方法:静态方法,可以直接使用类名调用,非静态方法可以去调用静态方法,但是静态方法不要去调用非静态的属性和方法,this和super不能在静态方法中使用

注意:
1. static关键字只能用于修饰成员变量,不能用于修饰局部变量。
1. 一个静态方法只能访问用static修饰的成员,没有被static修饰的成员必须先创建对象才能被访问,而静态成员被调用时可以不用创建对象。
1. 在非静态方法中可以访问静态方法和非静态方法

2、终态 final

修饰的对象:类,方法,属性
1. 修饰类:此类不能被继承
1. 修饰方法:此方法不能被重写
1. 修饰属性:属性变为常量,常量都是大写字母,可以在声明时赋值,也可以在构造器中赋值,通常我们看到的常量都是由public static final修饰的

3、本地 native

修饰对象:方法 将方法的实现由本地语言编写的代码实现

native 是用做java 和其他语言(如C语言)进行协作时用的,Java调用C语言的实现经常会用到native,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值