this super 多态

this关键字

  1. this调用构造方法
    构造方法调用格式:

    		this(参数列表);
    

    1.1 构造方法的调用

       	class Person {
    	// Person的成员属性
    	private int age;
    	private String name;
    
    	// 无参数的构造方法
    	Person() {
    	}
    
    	// 给姓名初始化的构造方法
    	Person(String nm) {
    		name = nm;
    	}
    
    	// 给姓名和年龄初始化的构造方法
    	Person(String nm, int a) {
    		// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
    		// 调用其他构造方法,需要通过this关键字来调用
    		this(nm);
    		// 给年龄初始化
    		age = a;
    	}
    	}
    

1.2 成员变量和局部变量同名问题
当在方法中出现了局部变量和成员变量同名的时候,可以在成员变量名前面加上this.来区别成员变量和局部变量

	class Person {
	private int age;
	private String name;

	// 给姓名和年龄初始化的构造方法
	Person(String name, int age) {
		// 当需要访问成员变量是,只需要在成员变量前面加上this.即可
		this.name = name;
		this.age = age;
	}

	public void speak() {
		System.out.println("name=" + this.name + ",age=" + this.age);
	}
}

class PersonDemo {
	public static void main(String[] args) {
		Person p = new Person("张三", 23);
		p.speak();
	}
}

super关键字

  1. 子父类中构造方法的调用
    在创建子类对象时,父类的构造方法会先执行,因为子类中所有构造方法的第一行有默认的隐式super();语句。
    格式:

     调用本类中的构造方法
     this(实参列表);
     调用父类中的空参数构造方法
     super();
     调用父类中的有参数构造方法
     	super(实参列表);
    

为什么子类对象创建都要访问父类中的构造方法?因为子类继承了父类的内容,所以创建对象时,必须要先看父类是如何对其内容进行初始化的,如下代码:

	public class Test {
		public static void main(String[] args) {
			new Zi();
		}
		
	}
	class Fu{
		int num ;
		Fu(){
			System.out.println("Fu构造方法"+num);
			num = 4;
		}
	}
	class Zi extends Fu{
		Zi(){
	         //super(); 调用父类空参数构造方法
			System.out.println("Zi构造方法"+num);
		}
	}

执行结果:
       Fu构造方法0
       Zi构造方法4 

多态

  1. 多态概述
    多态是 继封装、继承之后,面向对象的第三大特性。
    多态可以理解为事物存在的多种体现形态。例如动物中的猫,狗。 猫 a=new 猫(); 可是猫也是动物中的一种,那么也可以这么定义 动物 a= new 猫();这里的动物类就是从猫狗中抽取出相同的属性组合起来的。
    最终多态体现为父类引用变量可以指向子类对象。
    多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
    在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

  2. 多态的定义与使用格式
    多态的定义格式:就是父类的引用变量指向子类对象

    父类类型/接口类型  变量名 = new 子类类型();
    变量名.方法名();
    

普通类多态定义的格式

	父类 变量名 = new 子类();
	如:	class Fu {}
		class Zi extends Fu {}
		//类的多态使用
	Fu f = new Zi();

抽象类多态定义的格式

		抽象类 变量名 = new 抽象类子类();
		如:	abstract class Fu {
		         public abstract void method();
			     }
		class Zi extends Fu {
		public void method(){
				      System.out.println(“重写父类抽象方法”);
		}
		}
		//类的多态使用
		Fu fu= new Zi();

接口多态定义的格式

		接口 变量名 = new 接口实现类();
		如: interface Fu {
				     public abstract void method();
		}
		class Zi implements Fu {
				     public void method(){
		              System.out.println(“重写接口抽象方法”);
		}
		}
		//接口的多态使用
		Fu fu = new Zi();
  1. instanceof关键字
    instanceof关键字来判断某个对象是否属于某种数据类型
    使用格式:

    boolean  b  = 对象  instanceof  数据类型;
    如果属于对应类型,返回值为true,反之false
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值