Java中多态与static的用法
2021-04-30 13:51:13
## 1.什么是多态:
多态成立的3个条件:
1.子类继承或实现父类
2.子类重写父类方法
3.父类引用指向子类对象
```java
// 创建Animal类,父类
class Animal{
public String name; // 可被子类访问的name
public Animal() {
this.name = "Animal";
}
public void printName(){
System.out.println(name);
}
}
//创建子类
class Cat extends Animal{
Cat(){
name = "Cat";
}
}
public class Test {
public static void main(String[] args) {
Animal cat = new Cat();
cat.printName(); //Cat
Animal animal = new Animal();
if(animal instanceof Cat){ //进行判断,判断进行转为的为继承关系,否则报ClassCastException异常
animal = (Cat)animal; //强制转换,将父类对象强制转换为子类对象
}
animal.printName(); //Animal
}
}
```
## 2.java中static关键字的作用
被static修饰的为静态字段与静态方法,即类字段。
在类中定义static字段,即使类没有被实例化,static也存在。static属于类,不属于任何单位。
```java
//static修饰静态字段
class Animal{
public static String name = "animal";
}
public class Test {
public static void main(String[] args) {
System.out.println(Animal.name); //animal
}
}
//static修饰静态方法
class Animal{
public static String name = "animal";
public int id = 0;
//static 方法只能访问static字段,不可访问飞静态字段,不然,由类名调用时,可以操作非静态字段。
/*public static int get(){ //不可访问,直接报错
return id;
}*/
public static String get(){ //正确
return name;
}
}
//静态方法只能调用静态方法
public class Test {
public static int get(){
int i = 0;
return i;
}
public static void main(String[] args) {
System.out.println(get()); //animal
}
}
//静态代码块
class Animal{
static{
System.out.println("ssss");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Animal(); //输出Animal,在类进行实例化时,直接运行类中静态代码块,且只运行一次
Animal animal2 = new Animal(); //并不会输出Animal
}
}
```
在C语言中,函数内部定义的static字段,只有内部可以访问,函数外部不可以访问,但因为在静态区间内,所以,只有在程序销毁,才会消失。