Java进阶(二)——static,接口,多态,内部类

本文详细介绍了Java编程中的关键概念:static关键字的作用和访问规则,接口的定义、规范及关系,多态的条件、访问规则及其优缺点,以及内部类的类型和用法。通过实例解析,帮助读者深入理解这些核心概念,提升编程技能。
摘要由CSDN通过智能技术生成

目录

1、思维导图

2、static关键字

2.1作用

2.2访问规则

3、接口

3.1格式

3.2规范

3.2.1常量

3.2.2方法

3.2.3哪些内容不能在接口中存在?

3.2.4子类

3.3关系

3.3.1类与类

3.3.2类与接口

3.3.3接口与接口

4、多态

4.1条件

4.2访问规则

4.3优缺点

4.4类型转换

5、内部类

5.1成员内部类

5.2局部内部类

5.3匿名内部类


1、思维导图

 

2、static关键字

2.1作用

        static关键字表示静态,可以作用于成员变量和成员方法

        在类中,用static声明的成员变量为静态成员变量,也成为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效,同时静态变量被类的所有对象共享

        它的作用用一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。

2.2访问规则

        静态方法不能调用非静态成员,编译会报错

        被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。还可以通过对象来访问,但是比较麻烦,所以建议采用类名.静态方法的方式来调用该静态方法

public class Demo03 {
    int a;

    static int b;

    public void aaa(){

    }

    public void bbb(){
        System.out.println(a);
        System.out.println(b);
        aaa();
        ccc();
    }

    public static void ccc(){

    }

    public static void ddd(){
        //System.out.println(a);
        System.out.println(b);
        //aaa();
        ccc();
    }
}

        在上述代码里,非静态方法bbb访问了非静态成员变量a,静态成员变量b,非静态成员方法aaa和静态方法ccc,没有任何问题。

        但是用静态成员方法ddd调用相同的成员时,变量a和方法aaa会报异常,因为静态方法只能访问静态成员

3、接口

3.1格式

        生活中有很多接口的例子,像鼠标键盘的usb接口,安卓手机的type—c接口,苹果手机的扁平接口,接口的存在,让我们的工具可以放在一起使用,因为接口为它们制定了一个标准。

        java中的接口也是如此,制定了类和方法的标准,避免开发过程中因为各自想法不一样,而造成大家的代码无法联合的窘境

        接口的格式和类相似:

	public interface 接口名{
        
	}

        接口需要被实现,实现的时候需要用到implements关键字

	public class 类名  implements  接口{
        
	}

3.2规范

3.2.1常量

        接口中只能存在常量,即使写的变量形式,系统默认的三个修饰符:public  static  final,也会将其改成常量

3.2.2方法

        接口中只能存在抽象方法,接口中也存在默认的两个方法修饰符:public  abstract

3.2.3哪些内容不能在接口中存在?

        接口中不能创建对象,也不能有构造方法

3.2.4子类

        接口的子类必须重写接口的抽象方法,或者子类是一个抽象类

3.3关系

3.3.1类与类

         继承关系,单继承,支持多层继承,即一个类只能有一个父类,父类也可以有自己的父类,一个人只能有一个亲爹,亲爹也有自己的亲爹,也就是那个人的爷爷

3.3.2类与接口

        实现关系,多实现,多层实现没有必要,即一个类可以实现多个接口,一个人可以有多个干爹,但是干爹之间没必要分清谁是谁干爹

3.3.3接口与接口

        继承关系,多继承

	public interface EEE extends AAA,BBB{}

4、多态

4.1条件

        必须要有继承extends或者implements实现关系,如果没有这二者其中之一,那么多态也就不存在了

        并且还要用父类引用指向子类对象

//动物类
public class Animal {
    String name = "小头爸爸";
   
    public void eat(){
        System.out.println("爸爸吃馒头");
    }
}

//猫
public class Cat extends Animal {
    String name = "大头儿子";

    public void eat(){
        System.out.println("儿子吃牛肉");
    }
}

public class Demo02 {
    public static void main(String[] args) {

        //成员变量:
        //编译看左边(父类),运行看左边(父类)
        //成员方法:
        //编译看左边(父类),运行看右边(子类)
        Animal a = new Cat();
        System.out.println(a.name);  //小头爸爸
        a.eat();  //儿子吃牛肉

        //继承
        Cat c = new Cat();
        System.out.println(c.name);  //大头儿子
        c.eat();   //儿子吃牛肉
    }
}

4.2访问规则

        成员变量:
        编译看左边(父类),运行看左边(父类)
        成员方法:
        编译看左边(父类),运行看右边(子类)

4.3优缺点

        缺点:不能访问子类的特有成员

        优点:提高了代码的扩展性

4.4类型转换

        自动转换

	Cat c = new Cat();
	Animal a = c;

        强制转换

	Cat c = (Cat)a;

        在强制转换的时候,经常会出现ClassCastException的错误,这说明类型转换异常

        解决办法:

                        对象  instanceof  类名

        判断这个要转的对象是否属于后面的类型,如果是则会转,不是则不执行,也不影响其他对象被调用

if(a instanceof Cat){
    Cat c = (Cat)a;
}

5、内部类

5.1成员内部类

(了解)

        //外部类
        public class AAA {
            //成员变量
            int a = 10;
            //成员方法
            public void eat(){

            }
            //成员内部类
            class BBB{

            }
        }

5.2局部内部类

(了解)

格式:
	package com.itheima04;
    public class AAA2 {
        public void show(){
            //局部变量
            int a = 10;
            //局部内部类
            class BBB{
            }
        }
    }

5.3匿名内部类

	Person p = new Person() {
            @Override
            public void eat() {
                System.out.println("重写吃饭方法");
            }
        };

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值