static、多态(Java学习第二十天)

本文详细介绍了Java中的`static`关键字,包括其共享性、通过类名调用的特点,以及静态成员方法的访问限制。接着讨论了多态的概念,包括实现多态的条件和体现,并通过示例展示了多态在成员访问上的特点。最后,分析了多态带来的好处和弊端,指出其在提高程序扩展性的同时,可能导致无法直接使用子类特有功能的问题。
摘要由CSDN通过智能技术生成

static 关键字是静态的意思,可以修饰成员方法、成员变量

static修饰的特点

1、被类的所有对象共享(也是判断是否使用静态关键字的条件)

2、可以通过类名调用(推荐,因为还能通过)。

package day20b;

public class Student {
     public String name;
     public int age;
     //实例共享属性
     public static String gender;
     public void show(){
         System.out.println(name+age+gender);
     }

}


package day20b;

public class Person {
    public static void main(String[] args) {
        //推荐用类名调用
        Student.gender = "女";
        Student p1 = new Student();
        p1.name = "1";
        p1.age = 22;
        //不推荐对象调用
        //p1.gender = "男";
        p1.show();


        Student p2 = new Student();
        p2.name = "2";
        p2.age = 23;
        p2.show();
    }
}

static访问特点

非静态的成员方法:

1、能访问静态的成员变量;

2、能访问非静态的成员变量;

3、能访问静态的成员方法;

4、能访问非静态的成员方法

静态的成员方法:

1、能访问静态的成员变量;

2、能访问静态的成员方法;

静态成员方法只能访问静态成员

package day20b;

public class Student1 {
    //两个成员变量,静态和非静态
    private String name = "gw";
    private static int age = 22;

    //非静态成员方法
    public void show1(){
        System.out.println(name);
        System.out.println(age);
        show2();
        show3();
        show4();
    }
    public void show2(){

    }
    //静态成员方法
    public static  void show3(){
        //System.out.println(name);
        System.out.println(age);
        //show1();
        show3();
    }
    public static  void show4(){

    }


}

多态:同一个对象,在不同时刻体现出来的不同形态

多态的前提和体现:

1、有继承/实现管理;

2、有方法重写;

3、有父类引用指向子类对象

举例说明 

package day20b;

public class Animal {
    public void  eat(){
        System.out.println("这是动物!");
    }
}


package day20b;

public class Dog extends  Animal{
    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }
}



package day20b;

public class Result {
    public static void main(String[] args) {
        //注意这里是父类的引用,指向子类的对象
        Animal d = new Dog();
    }
}

多态中成员访问特点

成员变量: 编译看左边,执行看左边

成员方法:编译看左边,执行看右边

两个执行不一样的原因是: 因为成员方法有重写,成员变量没有

package day20b;

public class Animal {
    public String name = "动物";

    public void  eat(){
        System.out.println("这是动物!");
    }
}
package day20b;

public class Dog extends  Animal{
    public String name = "猫";
    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }
}
package day20b;

public class Result {
    public static void main(String[] args) {
        //注意这里是父类的引用,指向子类的对象
        Animal d = new Dog();
        d.eat();
        System.out.println(d.name);
    }
}

多态的好处和弊端:

多态的好处:提高了程序的扩展性

多态的弊端: 不能使用子类的特有功能

举例如下:

package day20b;

public class Animal {
    public String name = "动物";

    public void  eat(){
        System.out.println("这是动物!");
    }
}

package day20b;

public class Dog extends  Animal{
    public String name = "猫";
    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }
}


package day20b;

public class Pig extends Animal{
     public  void  eat(){
         System.out.println("猪吃白菜");
     }
     public void hobby(){
         System.out.println("睡觉,等死");
     }
}


package day20b;

public class AnimalDemo {
    public void  show(Animal a ){
        a.eat();
    }
}



package day20b;

public class Result {
    public static void main(String[] args) {
        //注意这里是父类的引用,指向子类的对象
        AnimalDemo ad = new AnimalDemo();
        Dog d = new Dog();
        ad.show(d);

        Pig p = new Pig();
        ad.show(p);
        //会报错,因为没办法调用子类的特有功能
        //ad.hobby();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值