未分类
2020-08-10 09:59:24
1822677238@qq.com
手机扫码查看
面向对象的三大特性super关键字
super关键字
在子类中,可直接访问从父类继承到的属性和方法,但如果父子类的属性或方法存在重名(属性遮蔽,方法覆盖)时,需要加以区分,才可以专项访问。
super访问方法
public class demos{
public static void main(String[] args) {
Sub s=new Sub();
s.name="西瓜虫";
s.eat("西瓜");
}
}
class Super{
String name;
int age;
public void eat(String feed){
System.out.println(name+"吃了"+feed);
}
}
class Sub extends Super{
//要使用super关键词必须继承父类
//如何做到与父类相同方法以及相同代码?
//如果手写代码的话,会不会多余,造成代码的冗余呢?
public void eat(String feed){
//使用 super 关键字 调用父类的方法
//前提必须 父子类属于继承关系,否则属于同类,不能调用
super.eat(feed);
}
}
super关键字访问属性
public class demos{
public static void main(String[] args) {
Dog d=new Dog();
d.method("我是猫");
}
}
class Animal{
String name="Animal";
}
class Dog extends Animal{
String name="Dog";
public void method(String name){
//此时 name 为形参的name
System.out.println(name);//我是猫
//此时 name 为当前对象的 name
System.out.println(this.name);//Dog
//此时 name 为当前对象父类的 name
System.out.println(super.name);//Animal
}
}
继承中的对象创建
1.在具有继承关系的对象创建中,构建子类对象会先构建父类对象
2.由父类的共性内容,叠加子类的独有内容,组合成完整的子类对象
public class demos{
public static void main(String[] args) {
}
}
class Animal{
String name;
int age;
public void eat(){}
}
class Dog extends Animal{
//由于子类继承父类,也有name属性和age属性以及eat方法
//sex属性属于该对象独有属性,run方法也是该对象独有的方法
String sex;
public void run(){}
}
继承后的对象构建过程
public class demos{
public static void main(String[] args) {
TaiDi td=new TaiDi();//2.3 创建子类对象,优先创建父类对象
td.sleep();
}
}
//1.分配空间Animal、Dog、TaiDi
//2.2 创建父类对象 Object
class Animal{//2.1 创建父类对象Animal
//3.2初始化属性和方法 4.2执行构造方法代码
String name;
public void eat(){System.out.println("Animal的eat方法");}
}
class Dog extends Animal{//2.创建父类对象Dog
//3.1初始化属性和方法 4.1执行构造方法代码
int age;
public void run(){
super.eat();//调用父类的eat方法
System.out.println("Dog的跑方法");
}
}
class TaiDi extends Dog{
//3.初始化属性和方法 4.执行构造方法代码
String weight;
public void sleep(){
super.run();//调用父类的run方法
System.out.println("泰迪的sleep方法");
}
}
super调用父类无参构造
public class demos{
public static void main(String[] args) {
new Tom();
}
}
class Animal{
public Animal(){
System.out.println("Animal 无参构造");
}
}
class Dog extends Animal{
public Dog(){
super();
System.out.println("Dog 无参构造");
}
}
class Tom extends Dog{
public Tom(){
super();
System.out.println("Tom 无参构造");
}
}
//运行结果为
Animal无参构造
Dog无参构造
Tom无参构造



发表回复