Java-Java基础01之语言特性及实现99乘法表、约瑟夫环
项目文件结构
主要内容有:Java基础中的Java语言的特性,及相关抽象、封装、继承、多态的应用,99乘法表、约瑟夫环等。
Java访问修饰符
com.xiaoming / XiaoMing.java:
package com.xiaoming;
import java.util.*;
import com.xiaoqiang.*;
public class XiaoMing {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap hm=new HashMap();
Cat cat1=new Cat();
System.out.println(cat1.getName());
}
}
class Dog
{
}
com.xiaoqiang / Cat.java:
package com.xiaoqiang;
public class Cat {
public int a;
protected String name;
String color;
private float price;
//提供一个访问name的成员方法
public String getName()
{
return this.name;
}
}
com.xiaoqiang / Test2.java:
package com.xiaoqiang;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Dog dog1=new Dog();
System.out.println(dog1.a);
}
}
class Dog
{
public int a;
protected String name;
String color;
private float price;
public void abc1()
{
System.out.println(a);
}
}
Com.XiaoQiang /XiaoQiang.java:
package com.xiaoqiang;
public class XiaoQiang {
/**
* @param args
*/
public static void main(String[] args) {
}
}
com.test / Test.java:
/*
* 功能:抽象类的必要性
*/
package com.test;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//Animal an=new Animal();//抽象类不能被实例化
}
}
abstract class Animal //抽象类
{
String name;
int age;
//动物会叫
/*
public void cry()//父类方法不确定性
{
System.out.println("不知道怎么叫!");
}
*/
public void aaa()
{
System.out.println("抽象类中的实现方法");
}
//抽象类中可以包含实现了的方法
abstract public void cry();//抽象方法
//抽象类的特征:
//1.抽象类不能被实例化
//2.抽象类可以没有抽象方法
//3.包含了abstract(抽象)方法的类,必须声明为abstract
//4.抽象方法不能有主体,即不能有{}
}
class Cat extends Animal
{
//当一个类继承的父类是抽象类的话,就需要在子类在把抽象类
//的所有抽象方法全部实现
//实现
public void cry()
{
System.out.println("猫猫叫。。。");
}
}
com.test2 / Test.java:
/*
* 功能:接口的案例
*/
package com.test2;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(Usb.a);
//创建一个计算机
Computer computer=new Computer();
//创建Camera
Camera cameral=new Camera();
//创建手机
Phone phone1=new Phone();
computer.useUsb(cameral);
computer.useUsb(phone1);
}
}
//Usb接口
interface Usb
{
int a=1;
public void start();
public void stop();
}
interface aaa
{
public void Eee();
}
interface kkk extends aaa
{
public void cry();
}
//接口不能被实例化,且接口中不能含有实现 了的方法
//接口可以理解成更加抽象的抽象方法
//接口中可以有被初始化的public,static,final类型的变量
//接口不能继承类,接口可以继承接口
//一个重要的原则:当一个类实现了一个接口,
//就要求该类把这个接口的所有方法都实现
class Camera implements Usb,kkk //一个类实现多个方法
{
public void start()
{
System.out.println("相机,开始工作了!");
}
public void stop()
{
System.out.println("相机,停止工作了!");
}
public void cry()
{
}
public void Eee()
{
}
}
class Phone implements Usb
{
public void start()
{
System.out.println("手机,开始工作了!");
}
public void stop()
{
System.out.println("手机,停止工作了!");
}
}
class Computer
{
//开始使用use接口
public void useUsb(Usb usb)
{
usb.start();
usb.stop();
}
}
com.test3 / Test.java:
/*
* final修饰类
*/
package com.test3;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Aaa aaa=new Aaa();
aaa.show();
Bbb bbb=new Bbb();
bbb.show();
}
}
//final修饰类,则表示该类不能被继承
//final class Aaa
class Aaa
{
int a=0;//如果不给初值,a=? ,在类中的成员变量最好赋个初值
//圆周率不希望被别人改,加final修饰
//如果一个变量用final修饰,则在定义时必须被初始化,而且后面不能改
final float rate_aaa_bbb=3.1415926f;
//给方法用final修饰,则表示不可以被修改,不可被 覆盖
final public void sendMes()
{
System.out.println("发送消息");
}
public void show()
{
System.out.println("a="+this.a);
}
}
class Bbb extends Aaa
{
public Bbb()
{
a++;
//rate_aaa_bbb++; //因为rate_aaa_bbb为final类型
}
/*
public void sendMes()
{
System.out.println("发送消息");
}
*/
}
interface Fish
{
//该方法实现******
public void swimming();
}
interface Bird
{
public void fly();
}
class Monkey
{
int name;
//跳
public void jump()
{
System.out.println("猴子会跳");
}
}
class LittleMonkey extends Monkey implements Fish,Bird
{
@Override
public void swimming() {
}
@Override
public void fly() {
}
}
com..test3 / Mty99.java:
/*
99乘法表
*/
package com.test3;
public class Mty99
{
public static void main(String [] args)
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
if(i==3&&j==3||i==4&&j==3)
System.out.print(" "+j+"*"+i+"="+i*j+" ");
else
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println("");
}
}
}
com.luowei / Demo1.java:
/*
* 功能:说明继承的必要性
*/
package com.luowei;
public class Demo1 {
/**
* @param args
*/
public static void main(String[] args) {
Pupil p1=new Pupil();
p1.printName();
}
}
//小学生类
class Pupil extends Stu
{
/*
//定义成员属性
private int age;
private String name;
private float fee;
*/
//交学费
public void pay(float fee)
{
this.fee=fee;
}
}
//幼儿
class Kid extends Pupil
{
}
//中学生
class MiddleStu extends Stu
{
/*
//定义成员属性
private int age;
private String name;
private float fee;
*/
//交学费
public void pay(float fee)
{
this.fee=fee*0.8f;
}
}
//大学生生
class CloStu extends Stu
{
/*
//定义成员属性
private int age;
private String name;
private float fee;
*/
//交学费
public void pay(float fee)
{
this.fee=fee*0.1f;
}
}
//将学生的共同属性抽象出来,做一个父类
class Stu
{
protected int age;
public String name;
public float fee;
public void printName()
{
System.out.println("名字:"+this.name);
}
//如果不希望子类继承某个属性或方法,则将其显示声明为私有
}
com.luowei / Demo2.java:
package com.luowei;
import javax.swing.*;
public class Demo2 extends JFrame {
public static void main(String [] args)
{
//Demo2 demo2=new Demo2();
Abc abc1=new Abc();
System.out.println(abc1.getMax(4,1.2f));
}
/*
public Demo2()
{
this.setVisible(true);
this.setSize(200,200);
}
*/
}
class Abc
{
//返回较大的整数
public int getMax(int i,int j)
{
if(i>j)
{
return i;
}
else
{
return j;
}
}
public float getMax(float a,float b)//重载,参数类型不同
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
//如果只是返回类型不同,是不能构成重载的
/*
public double getMax(float a,float b)//重载,参数类型不同
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
*/
//如果只是控制访问修饰符号不一样,也不能构成重载
/*
protected float getMax(float a,float b)//重载,参数类型不同
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
*/
}
com.luowei / Demo3.java:
package com.luowei;
public class Demo3 {
public static void main(String [] args)
{
//创建一只猫
Cat cat1=new Cat();
cat1.cry();
Dog dog1=new Dog();
dog1.cry();
}
}
class Animal
{
int age;
String name;
//都会叫
public void cry()
{
System.out.println("是个动物,不知道 怎么叫唤");
}
}
//猫猫类
class Cat extends Animal
{
//覆盖就是将父类的方法再重新写一遍,如下边的cry()方法
public void cry()
{
System.out.println("猫猫叫!");
}
}
//狗类
class Dog extends Animal
{
public void cry()
{
System.out.println("汪汪叫!");
}
}
com.luowei / Demo4.java:
/*
* 功能:约瑟夫环,数到m的小孩 出圈
*/
package com.luowei;
public class Demo4 {
/**
* @param args
*/
public static void main(String[] args) {
CycLink cyclink=new CycLink();
cyclink.setLen(5);
cyclink.createLink();
cyclink.setK(2);//设置从第几个人开始数数
cyclink.setM(2);//设置的数m
cyclink.show();
cyclink.play();
}
}
class Child
{
int no;
Child nextChild;
public Child(int no)
{
//给一个编号
this.no=no;
}
}
class CycLink
{
//先定义一个指向链表第一个小孩的引用
//指向第一个小孩的引用,不能动
Child firstChild=null;
Child temp=null;
int len=0;//表示共有多少个小孩
int k=0;
int m=0;
//设置小孩的个数
public void setLen(int len)
{
this.len=len;
}
//设置m
public void setM(int m)
{
this.m=m;
}
//设置从第几个人开始数数
public void setK(int k)
{
this.k=k;
}
//开始数数
public void play()
{
Child temp=this.firstChild;
//1.先找到开始数数的人
for(int i=1;i<k;i++)
{
//因为自己数一下,再找到下一个人,所以将i<k
temp=temp.nextChild;
}
while(this.len!=1)
{
Child temp2=temp;//用来存放第m-1个孩子
//2.数m下
for(int j=1;j<m;j++)
{
if(j==m-1)
{
temp2=temp;
}
temp=temp.nextChild;
}
/*
//找到要出圈的前一个小孩
Child temp2=temp;
while(temp2.nextChild!=temp)
{
temp2=temp2.nextChild;
}
*/
//3.将数到m的小孩,退出圈
temp2.nextChild=temp.nextChild;
//让temp指向下一个数数的小孩
temp=temp.nextChild;
this.len--;
}
//最后一个小孩子
System.out.println("最后出圈:"+temp.no);
}
//初始化环形链表
public void createLink()
{
for(int i=1;i<=len;i++)
{
if(i==1)//处理第一个小孩
{
//创建第一个小孩
Child ch=new Child(i);
this.firstChild=ch;
this.temp=ch;
}
else
{
if(i==len)//创建最后一个小孩
{
//继续创建小孩子
Child ch=new Child(i);
temp.nextChild=ch;
temp=ch;
temp.nextChild=this.firstChild;
}
else//创建中间小孩
{
//继续创建小孩子
Child ch=new Child(i);
temp.nextChild=ch;
temp=ch;
}
}
}
}
//打印该环形链表
public void show()
{
//定义一个跑龙套
Child temp=this.firstChild;
do
{
System.out.print(temp.no+" ");
temp=temp.nextChild;//指到下一个
}while(temp!=this.firstChild);
}
}
com.luowei / Demo5.java:
/*
* 功能:多态的应用
*/
package com.luowei;
public class Demo5 {
/**
* @param args
*/
public static void main(String[] args) {
/*
Cat2 cat=new Cat2();
cat.cry();
Dog2 dog=new Dog2();
dog.cry();
*/
/*
Animal2 an=new Cat2();//多态的应用,创建Animal引用an,在这an是猫
an.cry();//通过Animal中的覆盖cry()方法可以实现多态
an=new Dog2();//利用多态性,使an的状态成为狗
an.cry();
//用一种引用可以管理很多的实例
*/
Master master=new Master();
master.feed(new Dog2(), new Bone());
master.feed(new Cat2(), new Fish());
}
}
//动物类Animal
class Animal2
{
String name;
int 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 void cry()
{
System.out.println("不知道怎么叫");
}
//方法覆盖(重写)的作用:
//1.可以实现多态,实现一个父类引用管理多个子类实例,呈现多种状态
//2.可以具体化子类行为。
//动物可以吃东西
public void eat()
{
System.out.println("不知道 吃什么");
}
}
class Dog2 extends Animal2
{
//狗叫
public void cry()
{
System.out.println("汪汪叫");
}
//狗吃
public void eat()
{
System.out.println("狗喜欢吃骨头");
}
}
class Cat2 extends Animal2
{
//猫自己叫
public void cry()
{
System.out.println("猫猫叫");
}
//猫吃东西
public void eat()
{
System.out.println("猫喜欢吃鱼");
}
}
//食物
class Food
{
String name;
public void showName()
{
}
}
//鱼类
class Fish extends Food
{
public void showName()
{
System.out.println("鱼");
}
}
//骨头类
class Bone extends Food
{
public void showName()
{
System.out.println("骨头");
}
}
//主人类
class Master
{
//给动物喂食物,使用多态,方法就可以只用一个
//这样就不必给每一种具体类型的动物都写一个喂食物的方法了
public void feed(Animal2 an,Food f)
{
an.eat();
f.showName();
}
}