包含java上塑的词条

博主:adminadmin 2022-11-29 14:01:07 51

本篇文章给大家谈谈java上塑,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java塑型的概念

7.2 塑型

塑型(type-casting)

又称为类型转换

方式

隐式(自动)的类型转换

显式(强制)的类型转换

7.2.1 塑型的概念

塑型的对象

引用变量

将对象暂时当成更一般的对象来对待,并不改变其类型

只能被塑型为

任何一个父类类型

对象所属的类实现的一个接口

被塑型为父类或接口后,再被塑型回其本身所在的类

7.2.1 塑型的概念——一个例子

Manager对象

可以被塑型为Employee、Person、Object或Insurable,

不能被塑型为Customer、Company或Car

7.2.1 塑型的概念——隐式(自动)的类型转换

引用变量

被塑型成更一般的类

Employee emp;

emp = new Manager();

Car jetta = new Car();

Insurable item = jetta;

7.2.1 塑型的概念——显式(强制)的类型转换

引用变量:还原为本来的类型

Employee emp;

Manager man;

emp = new Manager();

man = (Manager)emp; //将emp强制塑型为本来的类型

7.2.2 塑型的应用

当一个类对象被塑型为其父类后,它提供的方法会减少

当Manager对象被塑型为Employee之后,它只能接收getName()及getEmployeeNumber()方法,不能接收getSalary()方法

将其塑型为本来的类型后,又能接收getSalary()方法了

7.2.3 方法的查找

如果在塑型前和塑型后的类中都提供了相同的方法,如果将此方法发送给塑型后的对象,那么系统将会调用哪一个类中的方法?

实例方法

类方法

7.2.3 方法的查找——实例方法

Manager?? man = new Manager();

Employee? emp1 = new Employee();

Employee? emp2 = (Employee)man;

emp1.computePay(); // 调用Employee类中的computePay()方法

man.computePay();? // 调用Manager类中的computePay()方法

emp2.computePay(); // 调用Manager类中的computePay()方法

7.2.3 方法的查找——类方法

总是在变量声明时所属的类中进行查找 9

Manager man = new Manager();

Employee emp1 = new Employee();

Employee emp2 = (Employee)man;

man.expenseAllowance(); //in Manager

emp1.expenseAllowance(); //in Employee

emp2.expenseAllowance(); //in Employee!!!

java用上塑造型有什么其他好处?

我的理解哈,

MapString,Integer map=new HashMapString,Integer();这样定义的话,你可以在map中放置任何类型的数据,而若你定义为hashMap的话,就只能放置hashMap类的数据了。

第一种写法你可以将map的类型重新定义为任何一个实现了Map接口的类,而第二种写法就不可以了。例子:

Map map=new HashMap();//这里我引用的事java.util下的

map=(Map) new org.aaa.lib.HashMap();//这里我引用的是我自己封装的HashMap,实现了Map接口的一个类

若你用HashMapString,Integer map=new HashMapString,Integer();定义map的话,你是不能进行重定义的。以上,还不懂请追问我。

java:关于getClass()方法

java.lang.Object中getClass()方法的用途:可以获取一个类的定义信息,然后使用反射去访问其全部信息(包括函数和字段)。还可以查找该类的ClassLoader,以便检查类文件所在位置等。

Class test=xxx.getClass(); 

//test带的方法有什么用 

//比如说可以返回类名

//知道该类中字段 

//知道该类中方法名 

//知道该类中参数名 

//知道该类中方法返回类型

好比说 :

Collection c=new ArrayList(); 

Class class=c.getClass(); 

List ll=c.getMethod("sublist",int.class,int.class).invoke(c,0,0);

从上面简单写了一段代码,会发现 Collection c仍然能调用sublist()方法,也就是利用了getClass()方法的反射机制了。

JAVA的向上塑性、向下塑性问题!

就是多态哦,难道没讲?百度搜java多态会得到许多答案,我也是昨天作了深刻的了解。很好。。具体我就不写了,你搜到结果后就会明白的。你这个a是父类类型的引用,指向Teacher的对象。它可以调用person中没有被student覆盖的方法,如果方法被覆盖了,调用的就是student里的对应的方法。以下是我参考的详细内容:

面向对象编程有三个特征,即封装、继承和多态。

封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。

继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢?

方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。

要理解多态性,首先要知道什么是“向上转型”。

我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过

Cat c = new Cat();

实例化一个Cat的对象,这个不难理解。但当我这样定义时:

Animal a = new Cat();

这代表什么意思呢?

很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?

因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的(如下题中child.func1(25)就不能用);

同时,父类中的一个方法只有在在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用(child 可以调用func1(),因为func1()没有被覆盖。如果父类中的方法被重写了,那父类类型的引用调用的是重写父类方法的那个子类方法即当调用func2()时调用的是子类的fun2());对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

看下面这段程序:

下载: PolymorphismTest.java

class Father{

public void func1(){

func2();

}

//这是父类中的func2()方法,因为下面的子类中重写了该方法

//所以在父类类型的引用中调用时,这个方法将不再有效

//取而代之的是将调用子类中重写的func2()方法

public void func2(){

System.out.println("AAA");

}

}

class Child extends Father{

//func1(int i)是对func1()方法的一个重载

//由于在父类中没有定义这个方法,所以它不能被父类类型的引用调用

//所以在下面的main方法中child.func1(68)是不对的

public void func1(int i){

System.out.println("BBB");

}

//func2()重写了父类Father中的func2()方法

//如果父类类型的引用中调用了func2()方法,那么必然是子类中重写的这个方法

public void func2(){

System.out.println("CCC");

}

}

public class PolymorphismTest {

public static void main(String[] args) {

Father child = new Child();

//child.func1(25)

child.func1();//打印结果将会是什么?

}

}

上面的程序是个很典型的多态的例子。子类Child继承了父类Father,并重载了父类的func1()方法,重写了父类的func2()方法。重载后的func1(int i)和func1()不再是同一个方法,由于父类中没有func1(int i),那么,父类类型的引用child就不能调用func1(int i)方法。而子类重写了func2()方法,那么父类类型的引用child在调用该方法时将会调用子类中重写的func2()。

那么该程序将会打印出什么样的结果呢?

很显然,应该是“CCC”。

对于多态,可以总结它为:

一、使用父类类型的引用指向子类的对象;

二、该引用只能调用父类中定义的方法和变量;

三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

java上塑的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java上塑的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。