public class Test{
public static void main(String[] arg) {
Animal animal = new Cat();
animal.i=10;
System.out.println(animal.i);
animal.asd();
animal.asd1();
Cat cat = new Cat();
cat.i=100;
System.out.println(cat.i);
System.out.println(animal.i);
cat.b=1000;
System.out.println(cat.b);
animal.i=10000;
System.out.println(animal.i);
System.out.println(cat.i);
Animal animal1 =new Cat(101,102);
System.out.println(animal.i+cat.i);
}
}
public class Cat extends Animal{
int b;
public Cat() {
}
public Cat(int b) {
this.b = b;
}
public Cat(int i, int b) {
super(i);
this.b = b;
}
@Override
public void asd1() {
System.out.println("asd1");
}
}
public abstract class Animal {
int i;
public Animal() {
}
public Animal(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public void asd(){
System.out.println("asd");
}
public abstract void asd1();
}
关于抽象类的总结
1.抽象类中不一定含有抽象方法,但含有抽象方法的类一定是抽象类,抽象方法是不需要写方法体的,如果某个类继承了抽象类,就必须得实现他的所有的抽象方法,不然会报错;
2.抽象方法中也可以有非抽象方法,和普通类一样抽象类的非抽象方法也可以使用引用.方法名的形式访问,子类也会继承父类的非抽象方法,并且可以调用。
3.抽象类中也可以定义实例变量,我们可以使用引用.变量名的方式访问和修改,但是子类虽然可以继承分类的实例变量但是却无法使用自己的引用去修改或者获取使用抽象类的引用访问和修改的变量。
cat.setI(102)
animal.setI(101);
System.out.println(animal.getI());
System.out.println(cat.getI());
在这里打印结果为101
102
虽然他们引用的是同一个变量但是值确不一样。
4.抽象类中也必须含有构造函数因为子类在创建对象是会自动去调用父类的 super() 空的构造函数以实现代码的复用,这是规定,不要问为什么
5.作为抽象类的子类我们继承了她就会继承他所有的东西,包括实例变量、非抽象方法、抽象方法。。。。
6.抽象类不能创建对象,因为抽象类是面向类的所以不会和对象产生关系但是我们可以创建上转型对象,类是面向对象的所以类可以创建对象。



