JavaSE学习3-----this,多态,接口

this关键字

this.代表当前类对象的地址值引用,

目的:为了防止局部变量隐藏成员变量

class A{
    String name
public void test(String name){
      this.name = name;
    }
}

this 的用方法

this.变量名;访问本类中的成员变量

this.方法名();访问本类中的成员方法

匿名对象

格式:

new ()一般只可以用一次;直接在栈内存开辟空间,使用完毕就要被回收,可以节省内存.

匿名对象可以作为参数传递:格式   类名.(new ());

构造方法

方法名和类名相同,没有具体返回值;连viod都没有.

public 方法名与类名相同(){

}

public 方法名与类名相同(参数类型1 参数名1,参数类型2 参数类型2.....){

}1.

目的:为了给类的成员初始化

        Student s = new Student();

        1.栈内开辟空间

        2.堆内申请空间

        3.为成员变量进行系统默认初始化

        4.

注意事项:

1.标准类中会系统会默认提供一个无参构造方法

2.如果提供了一个有参构造方法,系统既不会默认提供无参构造方法,建议永远给出无参构造方法

3.方法构造是可以重载的

一个类包括成员变量,成员方法,构造方法

一个方法的形式参数如果是引用类型,实际参数要传递当前类的具体对象

什么是标准类,标准类包括什么

  • 成员方法私有化
  • 无参构造永远给出,有参构造根据实际情况
  • 成员方法

代码块

代码块就是用{}括起来的内容

分类

局部代码块:在方法的定义中使用{}

                        {}的作用是限定局部变量的生命周期

构造代码块:在类的成员位置定义的{},在执行构造方法之前,如果类中有构造代码块,优先执行构造代码块,作用:也可以给类的成员进行初始化

静态代码块:

类只加载一次,静态代码块也只执行一次

格式:

        static {}

class test{
 {
            System.out.println("B");//2
    }
    static{
            System.out.println("A");  //1
}
   
    public test {
            System.out.println("C");//3
    }
}

优先级:静态代码块>构造代码块>构造方法

static关键字

static特点:

1)被static修饰的随着类的加载而加载,优先于对象存在

2)不能和this共存

3)本身含义就是共享,公用,可以多个对象共享公用

4)被静态修饰的成员方法或者成员方法(静态变量/静态方法)

class Demo{
    int a = 10;
    static int b = 30;
    public void test(){
        System.out.println(a);
        System.out.println(b);
    }
    public static test1(){
        test();//报错,静态方法只能访问静态方法,test是非静态
        Ssystem.out.println(b);
        Ssystem.out.println(a);//a是非静态的
      }
}

访问的方式:

        可以使用对象名来访问

        jvm直接类名访问 类名.变量名

                                      类名.方法名()

静态只能访问静态,静态不能访问非静态,非静态可以访问静态

继承

继承是将多个类中的共性内容提取出来,放在一个独立的类中,让这个独立的类和其他的类产生关系

extends

格式:

        class 父类名{

                共性内容代码

                提供setXXX/getXXX

}

        class 子类名 extends 父类名{}

继承的好处:

  • 可以提高代码的复用性
  • 可以提高代码的维护性,方便有继承关系代码的维护
  • 类与类产生继承关系,是多态的条件

继承的特点:只支持单继承,不支持多继承,支持多层继承.

注意事项:

1)子类在继承父类时,对于非私有的成员,直接继承;对于私有成员,可以通过公共的方法间接访问

2)被私有方法修饰的东西(成员变量/成员方法)只能在本类中访问

继承中的构造方法

子类继承父类,子类中的所有构造方法都默认访问父类的无参构造

父类中存在有参构造方法,没有无参构造方法,子类的所有构造方法全部出错

super和this 

super()访问父类的无参构造方法

super(xxx)访问父类的有参构造方法

super一定是子类构造方法中的第一句话

子类继承父类,一定要先执行父类的构造方法,初始化完毕之后,才能执行子类的构造方法

class A {
    void A() {

        System.out.println("一");
    }

    public int A(int a) {

        int result = a;
        System.out.println(result);
        return result;
    }
}
class B extends A {


    public void A() {
        System.out.println("2");
    }

    public int A(int a) {

        int result = a;
        System.out.println(result);
        return result;
    }
}

    class test {
        public static void main(String[] args) {
            B b = new B();
            b.A();
        }
    }

继承中成员变量关系

子类和父类的成员变量名称不一致,访问简单

子类和父类的成员变量一致

  1.   现在子类的局部位置找,是否存在,存在就是使用
  2. 子类的局部位置没有,在子类的成员位置找,是否存在,存在就说那个
  3. 如果子类的成员位置没有,然后在父类的成员位置找,是否存在,存在就使用
  4. 如果父类的成员位置也没有(父类没有它的父类,就报错,整个类中没有变量)

继承关系中成员方法的访问

子类继承父类,成员方法(公共方法)名称不一致,分别调用即可

如果成员方法名一样,系统认为子类要重写父类的方法,必须保证,子类的方法和父类一模一样,子类将父类的方法覆盖,方法重写,访问子类的功能

final关键字

含义:final表示最终的,无法更改的,状态修饰符

        final 修饰类,该类不能被继承

        finla 修饰变量,此时的变量是一个常量

编译时期常量 : final修饰的基本类型,基本数据类型的数据值不能在改
变 (不需要jvm加载)public static final int num = 100 ;
运行时期常量: final修饰的引用类型数据,引用类型:类,数组,接口 都需
要加载
地址值不能在改变
public static final Integer i = new Integer(100) ;
修饰成员方法,该方法不能被重写

多态

多态的前提条件

  1. 必须有继承关系
  2. 必须存在方法重写
  3. 父类引用指向子类对象  Fu fu = new Zi();    向上转型

多态的成员访问特点

        1)成员变量,编译看左,运行看左

        2)成员方法:编译看左,运行看右,存在方法重写

        3)静态的方法:编译看做,运行看左

        4)构造方法:分层初始化,先执行父类初始化,在执行子类初始化

多态的弊端:

不能访问子类的特有功能,解决方法:创建具体的子类对象

Zi zi = new Zi();  需要重新开辟内存空间,消耗内存资源

向下转型(强制转型)

Zi z = (Zi) fu   不需要单独去开辟内存空间

 抽象类

有个没有方法体的方法被称为抽象方法,类中如果有抽象方法,类必须是抽象类

格式

abstract class 类名{}

public abstract void 方法名(){

}

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

抽象类不能实例化,可以通过子类实例化

抽象类的成员特点:

成员变量:

        可以是变量,可以使常量

构造方法

        有构造方法,但是不能实例化

成员方法

        可以有抽象类,限定子类必须完成某些动作

        也可以有抽象方法,提高代码的复用性

抽象类的子类必须重写父类所有方法,否则要将子类定为抽象类,失去意义

抽象类abstract跟private final static冲突,不能同时出现

接口

接口是为了给某些class类提供额外的扩展功能,接口是比抽象类还抽象的,接口中的方法也是抽象方法,在实现接口的类中要重写接口中的方法.跟抽象类一样,接口不能实例化,只能通过子类实现

格式

interface 接口名{

        public abstract void 方法名(); 

}

接口实现格式

class 类名 implements 接口名{

}

 接口成员特点:        
成员变量
                只能是常量
                默认修饰符 public static final
构造方法
                 没有构造方法,接口只是扩展,不是具体存在的
成员方法
                只能是抽象方法,
                默认修饰符 public abstract
类与类 , 类与接口以及接口与接口的关系
类与类
继承关系,只能单继承,但是可以多层继承
类与接口
实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口
接口与接口
继承关系,可以单继承,也可以多继承
抽象类和接口的区别
成员区别
抽象类 变量 , 常量 ; 有抽象方法 ; 抽象方法 , 非抽象方法
接口 常量 ; 抽象方法
关系区别
类与类 继承,单继承
类与接口 实现,单实现,多实现
接口与接口 继承,单继承,多继承
设计理念区别
抽象类 被继承体现的是: ”is a” 的关系。共性功能
接口 被实现体现的是: ”like a” 的关系。扩展功能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值