封装 和继承的 疑问!~
封装的单位是对象; 继承的单位是类; 好象扯不上边;
可是对这句话不太理解; 被这些单位给搞晕了!~ 请大家帮忙写这样一个程序:
1.写一个类; 封装类的属性和部分方法; 并且封装构造方法; 写一个继承关系表示不冲突;
2. 在类的内部生成对象封装; 在外部通过一个接口声明 去调用这个类的实例;
说的不太通顺,还请见谅, 希望能给予帮助, 谢谢!~~
[解决办法]
楼主可以考虑设计模式中的抽象工厂模式
[解决办法]
还没有学过模式啊!`大哥!~~~
我主要是想理解透 封装 继承 接口 多态 消息 等的真谛!~
好让自己有一个清晰的思路!~~
我现在看模式还有点难! 但看程序应该不会有太大问题吧!~~~~
[解决办法]
封装的单位是对象;
把多种对像封装在一个对像中
public class FF
{
private int i;//int类型的对像i
pirvate String str;//String类型的对像str
}
FF f = new FF();
f对像中有int对像,也有String类型的对像.都是针对i,str这样的对像的.还可以有其它的对像.
继承的单位是类;
只能是一个继承其它的类,不能说一个对像继承其它对像.A类继承B类,我也不懂怎么去描述,我只好把理解为Java规范的约定.继承就是类与类之间的.封就是说把多种类型(int.String等)的对像封装在一种类型对像(FF f)中;
[解决办法]
这些东西我能说上一天。。。 。。。
[解决办法]
继承是类与类的.
[解决办法]
楼上的回答其实很详细,也很有耐心,楼主如果不满意的话,可以继续提出来.
你在16楼的回复太冲动了,很打击大家的情绪呢.
lz好象是在自学Java,很佩服楼主的自学精神和专研精神.
我是这么认为的: 楼主要求的程序即使写出来,也体现不了封装,多态,继承 的这些显著特点.
我就以我的理解来举一个例子,希望能简单的体现这3个特点:
以楼主为例:
现在我们有一个CSDNer:
bxdg42578670
JAVA要自学通
等 级:一个三角
-----------------------
我用一个抽象类把他的固有特点抽取出来:CSDNer.java 里面有属性的get和set方法,同样是抽象的,没有实现.
然后有一个楼主类继承自这个抽象类:楼主.java
- Java code
public abstract class CSDNer{ abstract所有属性对应的get和set方法;}
[解决办法]
路过了,学习了!
[解决办法]
封装 简单点说 就是把你的经常要用的 抽象出一个对象
继承 就是把封装的东西拿过来用 重写等等了
[解决办法]
楼主要实现的就是单例类!!!
楼主所说的封装好像和java中的概念封装不是一个意思!
单例类
实现单例类有2中方法
他们的共同点是 构造方法是private的
第一种方法:在类中提供public static final 成员变量。好处:性能稍微好点
第二中方法:在类中提供private static final 成员变量,然后提供public static 方法获取该实例。不改动api情况下,改动比较灵活
第二个方法是所谓的饿汉式
还有一个注意点:如果单例类需要序列化,那么一定要重写readResolve方法,保证反序列化出来的是一个实例
[解决办法]
ACCP [using]~~Poject 5
理解下面的CODE就不用考虑OOP概念什么的了,直接上机练就OK了
abstract class Animal//父类
{
public boolean mammal = true;//是否哺乳
public boolean carnivorous = true;//是否食肉
public int mood = 1;//情绪,默认好
public boolean isMammal()//显示是否哺乳方法
{
return this.mammal;
}
public boolean isCamivorous()//显示是否食肉方法
{
return this.carnivorous;
}
public void setMood(int mood)//设置情绪
{
this.mood = mood;
}
public int getMood()//显示情绪
{
return this.mood;
}
abstract public String sayHello();//打招呼方式方法(未完成)
abstract public String sayHello(int mood);//带参打招呼方(未完成)
}
interface LandAnimal//陆生接口
{
public int getNumberOfLegs();//有脚?(未完成)
}
interface WaterAnimal//水生接口
{
public boolean hasGill();//有腮?(未完成)
public boolean laysEggs();//有卵?(未完成)
}
//---------------------DOG------------------------------------
class Dog extends Animal implements LandAnimal//狗类 -:-)继承,拥有Animal所有公属性和方法等!
{
private int numberOfLegs = 4;//狗脚默认4脚 -:-)封装,Dog自己的属性
Dog()//构造狗
{
this.mammal = true;//是哺乳
this.carnivorous = true;//是食肉
}
public String sayHello()//重写狗
{
return "摇摇尾巴";
}
public String sayHello(int mood)//带参重写狗
{
this.setMood(mood);
switch (mood)
{
case 1://1为情绪好0为不好
return "旺旺旺叫";
case 0:
return "呜呜叫";
default:
return "摇摇尾巴";
}
}
public int getNumberOfLegs()//显示脚,接口实现ING
{
return this.numberOfLegs;
}
}
//---------------------CAT------------------------------
class Cat extends Animal implements LandAnimal//猫类实现陆生接口
{
private int numberOfLegs = 4;//猫脚4脚
Cat()//构造猫
{
this.mammal = true;
this.carnivorous = true;
}
public String sayHello()//重写猫
{
return "喵喵叫";
}
public String sayHello(int mood)//带参重写猫
{
this.setMood(mood);
switch (mood)
{
case 1://1为情绪好0为不好
return "咕噜咕噜叫";
case 0:
return "嘶嘶叫";
default:
return "喵喵叫";
}
}
public int getNumberOfLegs()//显示脚,接口实现ING
{
return this.numberOfLegs;
}
}
//-----------------------------蛙----------------------------
class Frog extends Animal implements LandAnimal,WaterAnimal//蛙类,水陆接口并现
{
private int numberOfLegs = 4;
Frog()//构造蛙
{
mammal = false;
carnivorous = false;
}
public String sayHello()//重写蛙
{
return "呱呱呱";
}
public String sayHello(int mood)
{
this.setMood(mood);
switch (mood)
{
case 1:
return "呱呱呱";
case 0:
return "扑通一声跳入水中";
default:
return "呱呱呱";
}
}
public boolean hasGill()
{
return true;
}
public boolean laysEggs()
{
return true;
}
public int getNumberOfLegs()
{
return this.numberOfLegs;
}
}
//******************************************************
public class Program
{
public static void main(String[] args)
{
Dog dog=new Dog();//实例狗
Cat cat=new Cat();//实例猫
Frog frog=new Frog();//实例蛙
if(dog.isMammal())//判断MAMMAL
System.out.println("狗是哺乳动物");
else
System.out.println("狗不是哺乳动物吗?");
if(dog.isCamivorous())//判断CAMIVOROUS
System.out.println("狗是肉食动物");
else
System.out.println("狗不是肉食动物吗?");
System.out.println("狗通常的情况下,和人打招呼的方式为:"+dog.sayHello());
System.out.println("狗被抚摸情绪好的时候,打招呼的方式是:"+dog.sayHello(1));
System.out.println("狗烦躁的时候会:"+dog.sayHello(0));
System.out.println("狗有" + dog.getNumberOfLegs() + "条腿");
System.out.println();
//---------------------------------------------------
if (cat.isMammal())
System.out.println("猫是哺乳动物");
else
System.out.println("猫不是哺乳动物吗?");
if(cat.isCamivorous())
System.out.println("猫是肉食动物");
else
System.out.println("猫不是肉食动物");
System.out.println("猫通常的情况下,和人打招呼的方式为:"+cat.sayHello());
System.out.println("猫情绪好的时候会:"+cat.sayHello(1));
System.out.println("猫烦躁的时候会:"+cat.sayHello(0));
System.out.println("猫有" + cat.getNumberOfLegs() + "条腿");
System.out.println();
//------------------------------------------------------
if (frog.isMammal())
System.out.println("青蛙是哺乳动物吗?");
else
System.out.println("青蛙不是哺乳动物");
if (frog.isCamivorous())
System.out.println("青蛙是肉食动物");
else
System.out.println("青蛙不是肉食动物");
System.out.println("青蛙通常的情况下,打招呼的方式为:"+frog.sayHello());
System.out.println("青蛙情绪好的时候会:"+frog.sayHello(1));
System.out.println("青蛙受到惊吓是会:"+frog.sayHello(0));
if (frog.laysEggs())
System.out.println("青蛙产卵");
else
System.out.println("青蛙不产卵?");
if (frog.hasGill())
System.out.println("青蛙有鳃");
else
System.out.println("青蛙没有鳃吗?");
System.out.println("青蛙有" + frog.getNumberOfLegs() + "条腿");
}
}
[解决办法]
各位,不建议你们用 楼主这样的作为例子。因为这些东西太实际,又很复杂。
[解决办法]
不建议使用