java入门第二季

看了慕课网站上的java学习第二季,总结如下

类是抽象的概念,仅仅是模板,对象是一个看得见摸得着的实体

定义一个类

定义类名

编写类的属性

编写类的方法

定义类的时候首字母要大写

 

 

成员变量的作用域是整个类内部可见,可以不赋初始值;局部变量针对于定义它的方法,必须赋初始值,不可以有多个同样名字的局部变量;两类变量重名的时候,局部变量优先级更高。

 

如果需要在静态方法中调用非静态变量需要通过创建类的对象,然后通过对象访问非静态变量

在普通成员方法中,可以直接访问同类的非静态变量和静态变量

静态方法在调用非静态方法时也需要通过对象来调用,调用静态方法可以直接调用

 

静态初始化块只在类加载时执行,且只执行一次,静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。静态初始化块需要static{}

 

封装

隐藏属性,通过方法来得到属性。

修改属性的可见性,e.g. private修饰符,创建getter/setter方法,在方法中加入属性控制语句,方法名是get+方法名

 

包的名字是全小写

 

 

对于访问修饰符:

Private只能本类访问

默认可以本类和同包访问

Protected可以本类、同包、子类访问

Public可以全部访问,本类、同包、子类、其他等

 

This区分属性和参数定义了一样的名字的情况下

 

内部类就是定义在另外一个类里面的类,与之对应的,包含内部类的类被称为外部类

内部类的作用:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

内部类可以分为成员、静态、方法和匿名

例如:

//外部类HelloWorld

public class HelloWorld {

   

   // 内部类Inner,类Inner在类HelloWorld的内部

   public class Inner {

       

                  // 内部类的方法

                   publicvoid show() {

                            System.out.println("welcometo imooc!");

                   }

         }

   

         publicstatic void main(String[] args) {

       

       // 创建外部类对象

                   HelloWorldhello = new HelloWorld();

       // 创建内部类对象

                   Inner i = hello.newInner();

       // 调用内部类对象的方法

                   i.show();

         }

}

 

成员内部类

必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,即:内部类对象名 = 外部类对象.new 内部类()

成员内部类的.class文件是:外部类名$内部类名.class

有外部类和成员内部类,如果两个里面有相同的成员变量或者方法,内部类默认访问自己的成员变量或者方法,如果要访问外部类的成员变量的话,使用this,比如外部类名.this.变量名

 

静态内部类

不能直接访问外部类的非静态成员,但可以通过new 外部类().成员

如果外部类的静态成员与内部类的成员名称相同,可以通过“外部类名.静态成员”访问外部类的静态成员,如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

创建静态内部类的对象时,不需要外部类的对象,可以直接创建:内部类对象名=new 内部类()

 

方法内部类

内部类定义在外部类的方法里面,只可以在该方法内使用,不能在外部类的方法以外的地方使用,所以方法内部类不能使用访问控制符和static修饰符

在方法里面创建方法内部类的对象然后调用内部类

 

继承

Class 子类名 extends 父类名

如果子类对继承父类的方法不满意,可以重写父类继承的方法

继承的初始化顺序,优先父类对象,之后才是子类对象

父类对象-属性初始化-构造方法-------子类对象-属性初始化-构造方法

 

 

final关键字

final关键字可以修饰类、方法、属性和变量

final修饰类,则该类不允许被继承

final修饰方法,则该方法不允许被覆盖(重写)

final修饰属性,则该类的属性不会进行隐式的初始化,类的初始化属性必须要有值,或在构造方法中赋值(但是只能选择其一)

final修饰变量,则该变量的值只能赋一次值,不允许再次修改,相当于一个常量

 

super关键字

在对象的内部使用,可以代表父类对象

Super.属性值获得父类属性值,直接在子类中属性值则直接输出子类属性值

子类的构造过程中必须调用其父类的构造方法

如果显示的调用父类的构造方法,super()需要放在构造方法的第一行

如果子类的构造方法没有显示的调用父类的构造方法,系统默认调用父类无参的构造方法

如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错

 

Object类是所有类的父类

1、  toString()方法 system.out.println(子类名)输出子类的地址

2、  equals()方法比较的是对象的引用是否是指向同一块地址,与==的作用类似,如果是比较数值的话是可以的,但是如果是引用的话,比较的是地址

多态

1、  引用多态,父类的引用可以指向本类的对象,父类的引用可以指向子类的多态

2、  方法多态,创建本类对象时,调用的方法是本类的方法;创建子类对象的时候,调用的方法为子类重写的方法或继承的父类的方法。

 

多态中的引用类型转换

1、  向上类型转换(隐式/自动类型转换)

2、  向下类型转换(强制类型转换)

3、  instanceof运算符,来解决类型转换的安全问题。If(animal instanceof Dog){}else{}

 

抽象类

Abstract定义抽象类

abstract定义抽象方法,只有声明,不需要实现

包含抽象方法的类是抽象类

抽象类中可以包含普通的方法,也可以没有抽象方法

抽象类不能直接创建,可以定义引用变量

abstract classAnimal { abstract void grow(); }

 

关注事物本质,用抽象类;关注一个操作,用接口

定义接口用interface关键字,一般修饰符是public,可以继承多个父类

修饰符 interface 接口名[extends 父接口1,父接口2]

接口中的方法都是抽象方法,系统会自动用public abstract自动修饰

继承父类实现接口的语法:

修饰符 class 类名 extends 父类 implements 接口1,接口2

{

类体部分//如果继承了抽象类,需要实现继承的抽象方法;要实现接口中抽象方法}

 

如果要继承父类,继承的父类必须在实现接口之前

 

使用接口:接口在使用过程中,还经常与匿名内部类配合使用,匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称,仅仅在使用的时候定义这个接口

    方法一:

IPlayGame ip3=new IPlayGame() {

            @Override

            public void playGame() {

                // TODO Auto-generated method stub

                System.out.println("使用匿名内部类的方式实现接口");

            }

        };

        ip3.playGame();

方法二:

new IPlayGame() {

            public void playGame() {

                // TODO Auto-generated method stub

                System.out.println("使用匿名内部类的方式实现接口");

            }

}.playGame();

 

接口中方法不能有方法体,同时方法的修饰符不能是private和protected

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值