这类问题主要考你接口和抽象类,多态的问题。首先要了解他们的作用,然后再出发。请打好基础,学习这门语言很重要。。。。
代码1: public interface Animal
代码2:public void playSound(){
Systemoutprintln("现在播放"+new Dog()getAnimalName()+"类的声音");
Systemoutprintln("现在播放"+new Cat()getAnimalName()+"类的声音");
}
代码3:
public void cry(){
Systemoutprintln("汪汪汪汪");
}
代码4:public String getAnimalName(){
return "狗";
}
代码5:
public void cry(){
Systemoutprintln("喵喵喵喵");
}
代码6:public String getAnimalName(){
return "猫";
}
Dog d=(Dog)a是将a对向强制类型转换成Dog类型的
18行写Animal a=new Dog()是不可以的,因为变量a已经在同一语句块声明了,是不可以再次声明的
12行的Anima不可以去掉,变量声明语句中数据类型不可以省略
import javautilScanner;
public class ShowDeffrentDigit {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(Systemin);
Systemoutprint("Enter ten numbers:");
int[] numbers = new int[10];
for (int i = 0; i < 10; i++) {
numbers[i] = inputnextInt();
}
int z = 10;
for (int i = 0; i < z; i++) {
for (int j = i + 1; j < z; j++) {
if (numbers[i] == numbers[j]) {
for (int k = j; k < z - 1; k++) {
numbers[k] = numbers[k + 1];
}
z = z - 1;
j = j - 1;
}
}
}
Systemoutprintln("The number of distinct number is " + z);
Systemoutprint("The distinct numbers are:");
for (int i = 0; i < z; i++) {
Systemoutprint(numbers[i] + " ");
}
}
}
Java程序:
import javaawtFlowLayout;import javaawteventActionEvent;
import javaawteventActionListener;
import javaxswingJButton;
import javaxswingJComboBox;
import javaxswingJFrame;
import javaxswingJTextField;
public class Main extends JFrame implements ActionListener {
JComboBox cmbMenu_All, cmbMenu_Selected;
JButton btnAdd, btnRemove;
JTextField txtNum;
String[] menus = {"羊肉火锅", "狗肉火锅", "鱼仔火锅", "剁椒鱼头", "水煮活鱼",
"柴火鱼", "酸辣鱼片", "茄子煲", "拨丝香蕉", "小炒肉",
"小鸡炖蘑菇", "水煮肉片", "白斩鸡", "海带炖排骨", "熘丝瓜",
"皮蛋煮苋菜", "醋溜土豆丝", "梅菜扣肉", "香芋地瓜丸", "凉拌藕尖"};
public Main() {
super("点菜");
thissetLayout(new FlowLayout());
cmbMenu_All = new JComboBox(menus);
cmbMenu_Selected = new JComboBox();
btnAdd = new JButton(">>");
btnRemove = new JButton("<<");
txtNum = new JTextField(10);
txtNumsetText("0");
txtNumsetAlignmentX(CENTER_ALIGNMENT);
thisadd(cmbMenu_All);
thisadd(btnAdd);
thisadd(btnRemove);
thisadd(cmbMenu_Selected);
thisadd(txtNum);
btnAddaddActionListener(this);
btnRemoveaddActionListener(this);
thissetSize(400, 200);
thissetVisible(true);
thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
public static void main(String[] args) {
new Main();
}
@Override
public void actionPerformed(ActionEvent arg0) {
JButton btn = (JButton) arg0getSource();
int num = IntegerparseInt(txtNumgetText()trim());
int i;
if(btn == btnAdd) {
for(i=0; i<cmbMenu_SelectedgetItemCount(); i++) {
if(cmbMenu_SelectedgetItemAt(i)toString()equals(cmbMenu_AllgetSelectedItem()toString())) {
break;
}
}
if(i < cmbMenu_SelectedgetItemCount()) {
return;
}
cmbMenu_SelectedaddItem(cmbMenu_AllgetSelectedItem());
num++;
txtNumsetText(StringvalueOf(num));
}
else if(btn == btnRemove) {
cmbMenu_SelectedremoveItemAt(cmbMenu_SelectedgetSelectedIndex());
num--;
txtNumsetText(StringvalueOf(num));
}
}
}
运行测试:
abstract class Animal{
String name;
public Animal(String name){
thisname=name;
}
abstract void shout();
}
class Dog extends Animal{
public Dog(String name){
super(name);
}
public void shout(){
Systemoutprintln("狗在叫");
}
}
class Cat extends Animal{
public Cat(String name){
super(name);
}
public void shout(){
Systemoutprintln("猫在叫");
}
}
class Sheep extends Animal{
public Sheep(String name){
super(name);
}
public void shout(){
Systemoutprintln("羊在叫");
}
}
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a=new Dog("汪星人");
letAnimalShout(a);
Animal b=new Cat("喵星人");
letAnimalShout(b);
Animal c=new Sheep("羊星人");
letAnimalShout(c);
}
public Static Animal get(String choice)//这句是定义一个静态方法get ,static表示该方法是静态方法, void表示方法没有返回值(在方法没有返回值时用),而该句的返回值类型是Animal (Animal是一个用户自定义的类 类似你熟知的int,string,char等), 例如public viod get(){}这个方法就没有返回值且是非静态方法 而public static string set(){}这个方法就是静态方法且返回值的string类型。请不要混淆返回值类型与static二者并非一个概念
静态与非静态:当一个函数或者一个变量前面加上static时表示该方法或变量是静态的,否则就是非静态的。java和c#一样是面向对象的语言,创建一个类后需要实例类的对象调用方法或者变量,当声明的方法或者变量时静态时就可以直接用类名调用,因为静态的是属于类所有,并非属于类的某个对象
choice是什么意思? choice是get方法的形式参数(形参)通俗一些就是个傀儡,只有这个get方法被调用的时候形参就被赋予了实参的值,才真正有了意义。例如你的例子Animal al=Storeget("dog");中调用了get方法并传递实参"dog" ,此时choice的值就是"dog","dog"与"dog"当然是俩个相等的字符串 所以程序最后输出的肯定和狗有关。如果get方法被调用时传的实参不是"dog",Animal al=Storeget("pig");此时choice值就是"pig","pig"与“dog”不是相同的字符串所以最后结果肯定和猫又关(呵呵)
if(choiceequalsIgnoreCase("dog"))是什么意思? 这是判断当get函数被调用时传递的实参是否是“dog”, java中equalsIgnoreCase是判断两个字符串是否相等它不考虑大小写,如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。(当get被调用时choice的值就变为实参的值)
正如LS所说main 方法是java程序的入口,当程序运行时首先运行main方法中的内容 ,记住main方法的格式就行,以后你会慢慢理解main
如果还有不是很清楚的地方 百度hi我……
这回答应该通俗易懂不知lz满意否?怎么样给分吧……
四个类:Pet Dog Penguin PetTest(测试类)
1、Pet类:
/宠物类
Created by LuHuan on 2017/7/27
/
public class Pet {
String name = "null";
int health = 100;//健康值
int love = 0;//亲密度
//打印输出宠物信息
public void print() {
Systemoutprint("我的名字叫" + name + ",我的健康值是:" + health + ",我和主人的亲密程度是" + love + "");
}
public String getName() {
return name;
}
public int getHealth() {
return health;
}
public int getLove() {
return love;
}
}
2、Dog类:
/狗狗类
Created by LuHuan on 2017/7/27
/
public class Dog extends Pet {
String strain = "拉布拉多犬";//品种
public String getStrain() {
return strain;
}
//重写宠物的自白方法
@Override
public void print() {
superprint();
Systemoutprintln("我是一只" + strain);
}
}
3、Penguin类:
/企鹅类
Created by LuHuan on 2017/7/27
/
public class Penguin extends Pet {
String sex = "Q仔";//性别
public String getSex() {
return sex;
}
//重写宠物的自白方法
@Override
public void print() {
superprint();
Systemoutprintln("我的性别是" + sex);
}
}
4、PetTest测试类:
/测试类
Created by LuHuan on 2017/7/27
/
public class PetTest {
public static void main(String[] args) {
Dog dog = new Dog();
dogname = "欧欧";
Penguin pgn = new Penguin();
pgnname = "楠楠";
Systemoutprintln("宠物的自白:");
dogprint();
Systemoutprintln("宠物的自白:");
pgnprint();
}
}
5、输出:
宠物的自白:
我的名字叫欧欧,我的健康值是:100,我和主人的亲密程度是0我是一只拉布拉多犬
宠物的自白:
我的名字叫楠楠,我的健康值是:100,我和主人的亲密程度是0我的性别是Q仔
public class Animal{
public run(){
Systemoutprintln("this animal is running");
}
}
class Horse extends Animal{
public run(){
Systemoutprintln("Horse is running");
}
}
class Dog extends Animal{
public run(){
Systemoutprintln("Dog is running");
}
}
class Main{
public static void main(){
Animal[] a = new Animal[3];
a[0] = new Animal();
a[1] = new Horse();
a[2] = new Dog();
for(int i = 0;i < alength;i++){
a[i]run();
}
}
}
这是让你掌握动态绑定。(代码直接写的,如果小错的话自己改改吧)
楼主是学生吧(所以没用一些内部类和foreach循环语句),这些入门的实验正好锻炼自己动手与学习能力的好机会,靠别人说是没有进步的,推荐的两本书就是Thinking Java和Core JAVA,好好研究一下原理,多多掌握基础知识。
祝楼主学有所成。
欢迎分享,转载请注明来源:表白网
评论列表(0条)