博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 多态 构造方法
阅读量:4324 次
发布时间:2019-06-06

本文共 2224 字,大约阅读时间需要 7 分钟。

多态

多态的前提:必须有父子类关系

public class Person {	public void eat() {		System.out.println("人吃饭");	}}
public class Student extends Person{	public void eat() {		System.out.println("学生吃饭");	}}
public static void main(String[] args){    person p = new Student();//将子类指向父类引用}

 

public static void main(String[] args) {//		1.父类,子类都是普通类的多态//		将一个Student对象赋值给Student引用变量		Student s = new Student();//		多态前提必须有有子父类关系不能多态//		将一个Student对象赋值给person引用变量//		多态体现形式子类对象指向父类引用		Person p = new Student();//		2父类是抽象类,子类是普通类多态		Animal a = new Cat();//		3父类是接口,子类是普通类多态		Smoking smoke = new Man();	}

 多态的成员的特点      父类引用调成员变量是调用父类,调用成员方法调用子类重写后的成员方法

public static void main(String[] args) {//	多态//	当父类引用调用成员方法时,//	如果父类有编译成功,子类重写,调用子类重写后方法,//	如果子类没有重写调用父类方法//	如果父类没有调用失败//	当父类引用成员变量时//	父类有,编译成功,调用父类的成员变量//	总结//	父类引用调成员变量是调用父类,调用成员方法调用子类重写后的成员方法	Person p = new Student();//向上转型	p.eat();	System.out.println(p.mun);}

 

 

interfaceof关键字

格式

boolean  b  = 对象  instanceof  数据类型;

public static void main(String[] args) {	Person p = new Student();//向上转型	boolean flag = p instanceof Person;	boolean flag1 = p instanceof Man;	System.out.println(flag);	System.out.println(flag1);}

 

多态的转型

向上转型   格式

父类类型  变量名 = new 子类类型();

向下转型  格式

子类类型 变量名 = (子类类型) 父类类型的变量;

向下转型的前提条件是  向上转型

向上转型的好处是   隐藏了子类类型,提高了代码的扩展性

向下转型的好处是   能实现子类特有功能

 构造方法

格式   修饰符 构造方法名(参数列表){ }

public class Person {	private String name;	private int age;	public Person(String name,int age){		this.name=name;		this.age = age;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public int getAge() {		return age;	}	public void setAge(int age) {		this.age = age;	}}

 

public class Text {	public static void main(String[] args) {		Person p = new Person("zhangsan",18);		System.out.println(p.getName()+"..."+p.getAge());	}}

 

构造方法调用和内存图解

 

1、首先会将main方法压入栈中,执行main方法中的 new Person("zhangsan",18);

2、在堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己的内存地址(0x001)。然后给成员变量进行默认初始化(name=null,age=0)。

3、执行构造方法中的代码(age =age ; name = name;),将变量age对应的23赋值给age,将变量name对应的”张三赋值给name,这段代码执行结束后,成员变量age和name的值已经改变。执行结束之后构造方法弹栈,Person对象创建完成。将Person对象的内存地址0x001赋值给p。

 

与set的区别

构造方法先创建对象赋值然后在分配地址,set是先创建对象分配地址然后赋值

 

当一个类没有构造方法时,系统默认提供一个空参构造;

当一个类有构造方法时,系统不会提供空参构造

可以再通过set方法进行改值

 

转载于:https://www.cnblogs.com/cgj1994/p/9703987.html

你可能感兴趣的文章
flume+elasticsearch+kibana遇到的坑
查看>>
C#——winform
查看>>
CSS3 transform制作的漂亮的滚动式导航
查看>>
《小强升职记——时间管理故事书》读书笔记
查看>>
Alpha 冲刺(3/10)
查看>>
spring中的ResourceBundleMessageSource使用和测试示例
查看>>
Ubuntu菜鸟入门(五)—— 一些编程相关工具
查看>>
Codeforces 279D The Minimum Number of Variables 状压dp
查看>>
打分排序系统漫谈2 - 点赞量?点赞率?! 置信区间!
查看>>
valgrind检测linux程序内存泄露
查看>>
Hadoop以及组件介绍
查看>>
1020 Tree Traversals (25)(25 point(s))
查看>>
第一次作业
查看>>
“==”运算符与equals()
查看>>
单工、半双工和全双工的定义
查看>>
Hdu【线段树】基础题.cpp
查看>>
时钟系统
查看>>
BiTree
查看>>
5个基于HTML5的加载动画推荐
查看>>
水平权限漏洞的修复方案
查看>>