Java入门笔记(二)

wuchangjian2021-11-04 12:11:18编程学习

Java入门笔记(二)

1.多态机制

何为多态,无非就是一个事物的多种形态。其实还是比较好理解的,给出如下例子:

//父类
public class Animal {
    public void show() {
        System.out.println("I'm an animal.");
    }
}
//Cat子类
public class Cat extends Animal {
    public void show() {
        System.out.println("I'm a cat.");
    }
}
//Dog子类
public class Dog extends Animal {
    public void show() {
        System.out.println("I'm a dog.");
    }
}
//demo方法调用类
 public static void show(Animal animal) {
       animal.show();
 }
 public static void main() {
     Dog d = new Dog();
     show(d);
 }
//得到的效果为:
//对于demo类的show方法,传入Animal参数为Dog将会调用Dog里面的方法,如果是Cat,将会调用Cat里面的方法。

多态的好处:便于项目进行子类的扩展,方便子类重用父类中公共函数。缺点:不能实现访问子类独立的属性或者方法。

在多态中存在子类像父类的转化和父类像子类的转化。

//子类像父类的抽象
Animal a=new Dog();//实现的效果为,得到的Animal类a中的属性访问依然来自父类,但是调用的方法是被子类重写的。
//父类像子类的具化(也可以成为返还子类对象)
Dog b=(Dog)a;//得到的b将会返还a Dog类的全部特征,并且不会新开内存

2.抽象类的使用特点

多态扩展出一种抽象类,主要是在实际逻辑中,对于一个Animal的抽象父类,其方法没有实际意义,比如:“动物吃食物”,由于没有具体的子类具化,不需要将具体的方法写出来。但是,为了保证父类的方法子类拥有,因此出现了抽象类,其基本特点为:同样具有构造方法,只要子类含有抽象方法,父类必须被定义为抽象类,且该抽象方法必须被子类重写。使用如下:

//父类
public abstract class Animal {
    String name="animal";
    Animal(){
        System.out.println("父类的构造函数");
    }
    Animal(String name){
       this.name=name;
    }
    public abstract void show();
}
//子类
public class Cat extends Animal {
    String name = "cat";
    public void show() {//必须加上show方法
        System.out.println("I'm a cat.");
    }
}
//plus:抽象类的子类同样可以是抽象类

3.接口的基本使用方法

接口和抽象类比较像,可以说抽象类是实现的是对于一个类的抽象(包括类的属性和行为),而接口主要是对于类的行为的抽象。需要注意的是,接口中的属性常量类型,方法是抽象方法,使用举例如下:

//定义一个接口interface1
public interface interface1 {
    public final int test=1;//等价于int test=1;
    public abstract void inter();//等价于void inter();
    //在idea中就会报public final和public abstract属于冗余修饰
}
//抽象的接口不能够直接使用,需要在类中实现对应的接口,然后通过实例化类来调用
//dog类中实现对应的接口
public class Dog extends Animal implements interface1{
    @Override//注意:必须是实现对应的抽象函数,除非将Dog类也设置成抽象类
    public void inter() {
        System.out.println("Dog类中实现interface1接口");
    }
}
//demo类中使用接口
interface1 test=new Dog();
test.inter();

需要注意的是,在继承方面,与抽象类相比,接口能够实现多级继承和直接的多继承。

//类的对接口的多实现
public class Dog extends Animal implements interface1,interface2,interface3
//接口的直接多继承(上面的代码也就等价于)
public interface interface3 extends interface1,interface2//接口多继承
public class Dog extends Animal implements interface3//类对接口的实现

最后,和类一样,接口同样可以作为参数在函数中进行传递

//接口作为参数的函数写法:<接口名:形参>
public static void interfaceFun(interface2 test ){
        test.show2();
}
//调用方式
public static void main(String [] args) {
    interface2 test=new Dog();//Dog类中必须实现接口才能正常调用
    interfaceFun(test);
}

4.this的总结

​ Java中的this不想JavaScript中的this那么灵活,只能用在构造函数里面。另外需要注意一点Java中关于this的如下写法是错误的:
在这里插入图片描述
原因其实也很好理解,调用的构造函数如果不是第一条,那么该构造函数上面关于属性的修改就是无效的。

里面。另外需要注意一点Java中关于this的如下写法是错误的:

[外链图片转存中…(img-DfI9LYis-1635998807418)]

原因其实也很好理解,调用的构造函数如果不是第一条,那么该构造函数上面关于属性的修改就是无效的。

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。