标签:操作 包含 sde 多继承 abs 不能被继承 数据初始化 存在 位置
标签: java 继承 抽象类 this super abstract
多个类中存在相同的属性和行为的时候,将这些内容抽取到单独一个类中,那么多个类无需在定义这些属性和行为,只要继承那个类即可。
class ClassDemo1{
public static void main(String[] args){
Dog d = new Dog();
d.color = "white";//虽然在Dog类中并未定义color,但是由于继承,并不影响赋值
System.out.println(d.color);
}
}
class Animal{
String color;
int weight;
}
/**
*创建Dog类,继承Animal
*/
class Dog extends Animal{
}
上一篇中我们说了构造函数中传参的方式,但是如果参数是这样的形式呢?
class ClassDemo1{
public static void main(String[] args){
Dog d2 = new Dog("white");
System.out.println(d2.color);
}
}
class Dog{
//成员属性
public String color;
public int age;
//构造函数
//空构造
public Dog(){
}
//只有一个参数的构造函数
public Dog(String color){
color = color;//******************请注意这里*******************
}
}
编译一下,ok通过,然后运行,输出是:
D:\JAVA\java3>java ClassDemo1
null
为什么呢?明明在主函数中传了值“white”了啊,这里为什么是null呢?问题就出在了 color = color 这里,这里两个变量名一样,说简单点,就是把电脑整懵逼了,那为了避免歧义,这时候就需要this关键词了
把它改为 this.color = color 就可以了。因为this代表的是本类对象的引用,如此一来就不会产生歧义了,再次运行,结果就输出了white。
什么是函数的覆盖?就是overwrite,也叫重写、复写,概念是:子类中出现与父类一模一样的方法时,会出现覆盖操作,也称为重写或者复写。
注意,父类中的private私有方法不可以被覆盖。在子类覆盖方法中,继续使用被覆盖的方法可以通过 super.函数名 来获取。
继承的时候权限可以放大,但是不可以缩小
当子类需要父类的功能,而功能主体子类有自己特有内同时,可以复写父类中的方法,这样,既沿袭了父类的功能,有定义了子类特有的内容。
始终记住一句话:任何对象的创建都意味着整个家族树的创建
抽象类不可以被实例化,也就是不可以用new创建对象。因为抽象类是具体事物抽出来的,本身就不是具体的,没有对应的实例,比如犬科是一个抽象的概念,真正存在的是狼和狗。而且抽象类即使创建了对象,调用抽象方法也没有意义。
2.非法修饰组合
final + abstract
private + abstract
private + final (没有意义)
标签:操作 包含 sde 多继承 abs 不能被继承 数据初始化 存在 位置
原文地址:https://www.cnblogs.com/zhqin/p/10015469.html