/*
多态:父类的引用指向子类的对象。
当两个类中有同一个方法(覆盖)时会优先调用子类
*/
Demo1。
package pc2;
class Father
{
public void func1()
{
func2();
}
public void func2()
{
System.out.println("AAA");
}
}
class Son extends Father
{
public void func1(int i)
{
System.out.println("BBB");
}
public void func2()
{
System.out.println("CCC");
}
}
public class Duotai {
public static void main(String[] args) {
// TODO Auto-generated method stub
Father child=new Son();
child.func1();child.func2();
/*child.func1(22);不能通过编译父类里没有func1(int i)*/
}
}
输出 CCC
CCC
Demo2.
package pc2;
class Vehicle
{
public void startUp()
{
System.out.println("调用了Vehicle类的startUp方法");
}
}
class Car extends Vehicle
{
public void startUp()
{
System.out.println("调用了Car类的startUp方法");
}
}
public class Sample4_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car c=new Car();
c.startUp();//
Vehicle v=new Car();
v.startUp();
}
}
输出:调用了Car类的startUp方法
调用了Car类的startUp方法
Demo3
package pc3_memory;
class Vehicle
{
void startUp()
{
System.out.println("一般汽车的启动方法");
}
String s="I'm OK!";
}
class Car extends Vehicle
{
void startUp()
{
System.out.println("小轿车的启动方法");
}
String s="Maybe you are right";
}
public class Sample4_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//动态链接时方法与变量的区别
Vehicle v=new Car();
v.startUp();
System.out.println(v.s);
System.out.println(((Car)v).s);//强制类型转化
}
}
输出:小轿车的启动方法
I'm OK!
Maybe you are right
Demo4
/*
对象与数组的关系
*/
Deno1
package pc2;
public class Reference {
public static void main(String args[])
{
Person students[];
students=new Person[2];
// System.out.println( students[1].age);
System.out.println("length "+students.length);
Person zhang=new Person();//定义并且实例化一个叫zhang的Person对象
zhang.age=15;
zhang.height=200;
Person lee=new Person();
lee.age=17;
lee.height=204;
students[0]=zhang;//把对象赋给Person类型的数组
students[1]=lee;
lee.info();//最后两条语句功能相同
students[1].info();
}
}
class Person {
public int age;
public double height;
public void info()
{
System.out.println("my age is:"+age+"my height is:"+height);
}
}
/*
length2
my age is:17my height is:204.0
my age is:17my height is:204.0
*/
Demo5
String s2="Monday";与
String s2=new String("Monday");的区别
package pc3_memory;
public class StringTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1="Monday";
String s2="Monday";
//String s2=new String("Monday");依次按照上下隐藏s2
if(s1==s2)
System.out.println("s1==s2");
else
System.out.println("s1!=s2");
if(s1.equals(s2))
System.out.println("s1.equals(s2)");
else
System.out.println("!s1.equals(s2)");
}
}
/*在堆里面创建好了字符串1过后,开创建s2时会先在堆里面(字符前缓冲池)判断有没有与s1对象相同值的
字符串,若有则s2会直接的引用s1.
如果使用new操作符,则表明需要一个新的,不要旧的。一个新的值相同的对象被创建,在缓冲池的不同位置
。就好比如一个人在河里游泳,而另一个人在岸边散步*/
/*
输出
s1==s2
s1.equals(s2)
*/
隐藏上面的:输出
s1!=s2
s1.equals(s2)
Demo6接口,内部类
内部类
package pc2;
interface ComputerWeight//定义了一个接口实现计算重量的功能
{
public double ComputeWeight() ;
//接口没有构造函数,因为构造函数不能继承,Java是纯虚的,抽象类可以有构造函数
}
class Television implements ComputerWeight//以下三个类实现了接口的功能,通过在类体里实现接口的方法
{//计算电视机的重量
Television(double a)
{
this.a=a;
}
public double ComputeWeight()
{
return a;
}
double a;
}
class Computer implements ComputerWeight
{//计算电脑的重量
Computer(double a)
{
this.b=a;
}
public double ComputeWeight()
{
return b;
}
double b;
}
class WashMachine implements ComputerWeight
{//计算洗衣机的重量
WashMachine(double a)
{
this.c=a;
}
double c;
public double ComputeWeight()
{
return c;
}
}
class Car//定义汽车类,实现将不同的接口实现的功能相加
{
ComputerWeight goods1;//表现出like-a
ComputerWeight goods2;
ComputerWeight goods3;
Car(ComputerWeight goods1,ComputerWeight goods2,ComputerWeight goods3)
{
this.goods1=goods1;
this.goods2=goods2;
this.goods3=goods3;
}
public double getTotalWeights()
{
return goods1.ComputeWeight()+goods2.ComputeWeight()+goods3.ComputeWeight();
}
}
public class InterTest {
public static void main(String args[])
{ ComputerWeight goodsOne=new Television(93);/*接口类型的引用
指向一个实现该接口的对象,这是Java里的一种多态现象。
Java里的接口不能被实例化,通过接口来调用方法,屏蔽掉具体方法的实现。
这就是接口回调,也叫做面向接口的编程
*/
ComputerWeight goodsTwo=new Computer(32);
ComputerWeight goodsThree =new WashMachine(45);
Car car=new Car(goodsOne, goodsTwo, goodsThree);
System.out.println(car.getTotalWeights());
System.out.println(goodsOne.ComputeWeight());
System.out.println(goodsTwo.ComputeWeight());
System.out.println(goodsThree.ComputeWeight());
}
}
输出:
170.0
93.0
32.0
45.0
相关推荐
你不想学习现在最高级的程序高计语言吗,你知道它是什么吗?本人经过多年的心血总结出最强大的学习这门高级程序设计语言的教程---JAVA程序设计语言,希望你能喜欢!!!
学啦半年java的我心血来潮编写播放器,但是对jmf完全不熟,于是上网找啦半天。都是前辈的心得,分享给友友们,希望对你们有帮助。
学啦半年java的我心血来潮编写播放器,但是对jmf完全不熟,于是上网找啦半天。都是前辈的心得活总结什么的,分享给友友们,希望对你们有帮助。
这是一个java写的计算器,除了加减乘除外还实现了许多的函数,比如sin,cos,求倒数,二十进制转换等,是我十多天的心血,程序非常长,也成功实现了设定的功能,有漂亮的用户界面,通过这个程序可以学到很多关于java ...
该方块是本小组的杰作 融汇了java程序精华部分的,凝结了我们的大作业的心血
这是一个心血来潮的小作品...... | | 身边的朋友都喜欢玩农场,圣诞节将近,见到朋友的心情改的是想种圣诞老人,于是就 | | 有了这个小玩意。希望大家快乐。初学java,把一些基本的东西,尽量都用上了。适合初学...
初学Java编写的万年历程序,花费了不少心血,大家可以参考下!
包括了Java基础知识、面向对象、IO流、线程、网络编程、JEE、servlet、JSP、Javascript、框架理解、ORM对象关系型数据库映射、hibernate、spring、事务、EJB、UML等技术的基本理解和总结,文档共66页!
内含阿里多个版本编程规范,编程规范是基础!项目未动,规范先行!包含了无数阿里人的心血和技术结晶,踩了无数的坑之后才有的这个规范。也可以在 Idea 插件中下载阿里编程规范的插件。
Efs框架从研发到时间,历时近10年,积累了大量实战软件工程专家、数学专家的心血不断完善而成,已应用的大大小小的项目几十个,从小项目的开发管理维护设计到大项目的负载均衡设计,Efs逐渐形成了一整套完整的基于B/...
操作系统中的进程调度算法,包括时间片轮,优先数,先进先出~~~心血啊。
在培训学校学习时做的一个小项目,加上了socket、C3P0连接池和swing界面。MD5加密、Excel批量添加什么的没来的及做,能力有限,项目时间不够用,...虽然做的不好看,但毕竟是自己的心血,希望能给需要的人一些启发。
为了高薪就业,我花了不少心血去参加培训,在培训中,也下了很大的功夫 ,学会了太多太多,就业之后才发现,会的东西还是太少, 真正的就业了,才发现,应该抓紧时间,多会写东西,然后追逐自己的利益, 得到自己的...
非常不错的资源 myeclipse+jdk1.6 本人花费了不少心血完成的!采用ui->bo->dao分层架构,实现了数据库存储数据及使用文件系统保存数据,供初学者学习
一本书可以改变一个人,一本书集成了无数人的心血。对于一个编程多年的老鸟,我想你需要这样一本书。
人物:一个心血来潮学习Python的JAVA程序员 文章目录vlog正文入门基础注释算数运算符及优先级程序执行原理变量概念和定义方式变量的命名变量的输入和输出数据类型数值型非数值型列表元组列表与元组的互相转换字典...
Kgshop每一行代码都经过严谨的测试,汇聚大批工程师多年的心血。广州JUULUU会继续努力,一步步优化这款来之不易的开源java SHOP。 要求运行环境: Mysql 5.1 app server;Tomcat 6.0.33/7 jboss 6/7 编译Java SDK...
在用Eclipse编写Java应用程序时,感觉很爽,Eclipse不愧是强大的IDE,不冤枉IBM花看那么多钱和众多开源爱好者的努力(你们辛苦了!!谢谢!!!)。突发奇想,想玩玩Eclipse编写C++程序。 。。。。。。 在Windows下...
工作两年居然没有在上面发布任何资源,前几天心血来潮把平时的练习的一个东西拿来重写了一下,现在把源码拿来给大家分享一下。