Java初级笔记_面向对象3

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

Java基础知识

一、Math类的随机数

类名调用静态方法:Math.random()

所在包:java.lang
类:Math
方法:public static double random():

java.lang包下的类是不用导包就可以直接使用的。

例:产生1-100之间的随机数:
int number = (int)(Math.random()*100)+1;

二、如何使用API

A:找到文档,打开文档。
B:点击左上角的显示变成隐藏,然后点击索引
C:明确自己找的是什么,类还是接口,什么类。比如Math
  明确后就在那个输入框里面输入Math,然后回车,再回车。

D:看这个类的结构
    java.lang 
       类 Math

      java.util 
       类 Scanner

   如果是java.lang包下的类,是可以直接使用的(如Math类)。否则,就需要导包才能使用(如Scanner类)
E:看看对这个类的说明。
F:看构造方法
     名称:字段 -- 成员变量 -- 属性。
    a:有构造方法,那么,就通过构造方法创建对象使用。
    b:没有构造方法,那么,这个类的成员一般都是静态。通过类名调用。

G:按照正常的操作使用方法。
     左边:
是否静态:如果静态修饰,那么可以通过类名调用。否则,就必须创建对象调用。
是否有明确返回值:如果是void类型,就直接调用即可。否则,就可以输出或者赋值。
    右边:
看方法名:不要写错了。
看参数:看参数类型及个数

三、final关键字

(1)是一个关键字,最终修饰符,可以用于修饰类,成员变量,成员方法。
(2)特点:
          它修饰的类不能被继承。
        修饰变量,变量的值不能更改,成为了常量。
  -常量必须有值。
  -常量的值只能赋值一次。
  -引用类型常量可以更改其堆内存对象中的值。
内部类只能访问被外部类中被final修饰的局部变量。
它修饰的成员方法是不能被子类重写的。

四、多态

(1)同一个对象在不同时刻表现出来的不同状态。主要指的是方法的多态。
         另外的表达方式:针对同一个对象,编译期类型和运行期类型不一致。
(2)前提:
       A:有继承或者实现关系。
       B:有方法重写。
       C:有父类或者接口引用指向子类或者实现类对象。

(3)好处和弊端:
         A:好处
扩展性和维护性(是由继承和实现保证)。
       B:弊端
不能使用子类的特有功能。

(4)向上转型和向下转型
         A:向上转型
 把子类对象赋值给父类或者接口引用
       B:向下转型
 把父类或者父接口引用强制转换为子类

(5)多态中的使用成员特点
         A:成员变量
   编译运行都看左边
       B:成员方法
   编译看左边,运行看右边。

全部看使用的变量类型,只是在调用该方法时,检查子类是否重写。


(6)多态的体现形式
       A:具体类多态(几乎不用)
       B:抽象类多态
       C:接口多态

五、抽象类

(1)理解:

   多个具体的事物具备相同的方法声明,而方法体不同,我们就只抽取方法声明,然后定义到一个类中。而一个    没有方法体的方法是一个抽象方法,一个类中有抽象方法,该类必须定义为抽象类。

(2)定义

   包含抽象方法的类就是抽象类。而且一定是抽象类
   抽象类不一定包含抽象方法。
   类/抽象类不一定包含方法。
   抽象类可以有非抽象方法。

(3)格式:
   抽象类与抽象方法均需要使用abstract关键字。
   抽象方法格式:
修饰符 abstract 返回值类型   函数名(参数列表) ;
   抽象类格式:
修饰符 abstract class 类名{}
(4)抽象类的特点:
         A:抽象类本身无法实例化。

       B:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。

       C:抽象类通过多态的形式创建其子类实例对象。

       D:子类需要将抽象父类的抽象方法均覆盖才可以实例化,否则依然是抽象类。

       E:抽象类强制子类必须实现抽象方法。

(5)抽象类的几个小问题
         A:不能被实例化,要构造方法干啥?

          构造方法作用是初始化抽象类的成员变量,供子类使用
         B:一个类中没有抽象方法,居然定义抽象类,有什么意义?

          
         C:抽象关键字不能和哪些关键字共存
  private  抽象类需要继承,final修饰的无法继承
  final    抽象类的方法需要被覆盖,如果private修饰的话,子类无法访问
  static    静态的。抽象类抽象方法无方法体,调用无意义
(6)抽象类的成员:
          A:成员变量 有变量,也有常量
B:构造方法 有构造方法,用于子类访问父类数据的初始化
C:成员方法 有抽象方法,也有非抽象的方法

(7)注意
      抽象类包含构造方法,用来给属性赋值供子类实例对象使用

六、接口

(1)概述

   当一个抽象类中的方法都是抽象的时候,java就提供了一种更抽象的表达方式,叫接口。接口就是比抽象类更    为抽象的表现形式

(2)格式:
   
定义接口:interface XX {}
   使用接口:class YY implements XX{}

(2)接口的成员特点:
          A:成员变量 是常量 默认修饰符 public static final(这些修饰符可以不写)
B:成员方法 抽象方法 默认修饰符 public abstract(这些修饰符可以不写)

(3)接口的特点:
          A:接口用interface定义
B:实现类实现接口用implements标识

        C:接口是对外暴露的规则。

D:接口是程序的功能扩展。

E:接口的出现降低耦合性。

F:java支持类同时实现多个接口。

G:java支持类在继承一个类的同时,实现多个接口。

H:接口与接口之间可以有继承关系。并且可以多继承。

I:接口不能被实例化。

J:接口是”like a”的关系

K:子类实现接口的时候,要么是抽象类,要么全部实现接口方法

(4)接口和类的关系

A:类与类的关系

    继承关系,只能单继承,可以多层继承。我继承了你,你继承了别的类

B:类与接口的关系

    实现关系,可以单实现,也可以多实现。

    还可以在继承一个类的同时,实现多个接口。

    class A extends B implements C,D

C:接口与接口的关系

    继承关系,可以单继承,也可以多继承。

(5)接口的思想特点(理解)

          A:对外暴露的规则(USB接口)

B:程序的扩展功能(多态)

C:降低程序的耦合性(多态)

D:让类可以多实现

(6)接口和抽象类的区别

       共性:都是不断抽取出来的抽象的内容。

A:成员特点

    抽象类:
成员变量: 可以变量,也可以常量
成员方法: 可以抽象,也可以非抽象
构造方法: 有
    接口:
成员变量: 只能是常量
成员方法: 只能是抽象
构造方法: 无

B:继承或者实现关系特点

    a:类与类的关系
继承关系,只能单继承,可以多层继承。

    b:类与接口的关系
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。

    c:接口与接口的关系
继承关系,可以单继承,也可以多继承。

C:设计区别
抽象类中定义的是体系的共性内容。表达的是:is a的关系。
接口中定义的是体系的扩展功能。表达的是:like a的关系。

(7)如何实现一个继承体系

分析:由具体到抽象
实现:由抽象到具体

学习:抽象的内容,因为它定义的是共性内容。
使用:具体的内容,因为它才是具体实现,才具备更多的功能。

七、内部类

(1)把类定义在一个类的内部。

(2)特点:

     A:内部类可以直接使用外部类的成员,包括私有。

      B:外部类要使用内部类成员,必须创建对象使用。

(3)内部类的分类:

          局部内部类:定义在方法中的内部类

成员内部类:定义在类中方法外的内部类

(4)成员内部类

class Outer {
class Inner {

}
}

       普通修饰符修饰的时候:

 外部类名.内部类名 变量 = 外部类对象.内部类对象;

 Outer.Inner oi = new Outer().new Inner();
 class Outer {
static class Inner {
     void method(){}
}
}

        用静态修饰内部类时:

    外部类名.内部类名 变量 = 外部类名.内部类对象

    Outer.Inner oi = new Outer.Inner();

        用静态修饰内部类和方法时:

    Outer.Inner.method()

        成员内部类:

     private:为了数据的安全。

     static:为了方便调用。

(5)局部内部类

       A:带名字的局部内部类
class Outer {
public void method() {
final int a = 10;
class Inner {
public void show() {
System.out.println("show");
System.out.println(a);
}
}
Inner i = new Inner();
i.show();
}
}

        B:匿名内部类(掌握)

a:没有名字的局部内部类。其本质是一个对象。是通过多态来实现的。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};

本质是一个继承了类或者实现了接口的子类匿名对象。

(6)面试题:
interface Inter {
public abstract void show();
}


class Outer {
//补齐代码
}

class Test {
public static void main(String[] args) {
Outer.method().show();
}
}

八、包

包的概述

  包就是将类分类管理,不同类的类放在不同的包下。其本质就是一个文件夹。

包的作用:让相同类名的类可以存在。为了组织代码。

cn.itcast.action   cn.itcast.service  cn.itcast.db

定义包:

package 包名.包名...;

带包的编译和运行

      A:方式一
    手动式
  a:javac编译代码
  b:手动建立包,把class扔进去
  c:java执行,带全路径

      B:方式二
     自动式
   a:通过javac编译自动生成包
javac -d . 文件名
   b:通过java运行class文件
java 包名.包名.class文件名不带扩展名

不同包下的类之间的访问

   权限够大才行。

   以后,我们所有定义的类都用public修饰。

面试题:
    在同一个java文件中,可不可以有多个类?

      可以。而我们知道类是可以用public修饰的,那么,可不可以多个类都用public修饰?不可以。并且,一般       的时候,如果有main方法也存在的时候,都是public修饰带main那个类。文件名必须和该public修饰的       类名一致


导包
   (1)如果多次使用一个多级包的类,每次带全路径太麻烦,我们就考虑使用导包。

   (2)导包的格式:

import 包名.包名...;

注意:
在同一个包下如果有多个类被使用,可以使用通配符*来导入,但是不建议。
推荐:使用谁导入谁。
   (3)面试题:
package,import,class出现的位置?
package > import > class

九、权限修饰符

(1)用于保证在不同的情况下可以使用
(2)使用如下
本类 同一个包下 不同包下的子类 不同包下的无关类
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y

常见的组合规则:

权限修饰符+abstract/final/static+...

我们到底怎么用(开发的时候一般都这么做):

类:
public class Demo {

}


成员变量:
变量:private String name;  加上相应的getter和setter
常量:public static final int X = 10;


构造方法:
不让外界创建:private Demo(){}
大部分:public Demo(){}


成员方法:
不让外界用:private void show(){}
大部分:public void method(){}
抽象方法:public abstract void function();

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值