<pre name="code" class="java">class Factory { static Factory factory = new Factory(); private Factory(){} int num =0; public static Factory getInstance() { return factory; } public void jiaGong() { System.out.println("加工的是第"+(++num)+"个零件儿"); } } class Demo2 { public static void main(String[] args) { Factory f1 = Factory.getInstance(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); Factory f2 = Factory.getInstance(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); } }
class Factory { static Factory factory = new Factory(); private Factory(){} int num =0; public static Factory getInstance() { return factory; } public void jiaGong() { System.out.println("加工的是第"+(++num)+"个零件儿"); } } class Demo2 { public static void main(String[] args) { Factory f1 = Factory.getInstance(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); f1.jiaGong(); Factory f2 = Factory.getInstance(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); f2.jiaGong(); } }
class SuperMan { private String name; static SuperMan superMan = new SuperMan("克拉克"); private SuperMan(){} private SuperMan(String name) { this.name = name; } public static SuperMan getInstance() { return superMan; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } } class Demo3 { public static void main(String[] args) { SuperMan superMan = SuperMan.getInstance(); System.out.println(superMan.getName()); } }
/*继承:1:提高了代码的重复利用,2:使类和类之间产生了关系 被继承的类是父类,继承的类称为子类 java中是单继承的: ·1:单继承:一个类只能有一个父类 2:多继承:一个类可以有多个父类 ---单继承 class Fu { } class Zi extends Fu { } ---多继承:会出现调用的不确定 class Fu1 { public void show() { } } class Fu2 { public void show() { } } class Zi extends Fu1,Fu2 { } Zi z = new Zi(); z.show(); 支持多层继承: class A { } class B extends A { } class C extends B { } 什么时候用继承? 不要为了重复利用代码而继承 事物之间存在所属关系时使用继承 比如:学生属于人的一种 猫属于动物的一种 */ class Demo4 { public static void main(String[] args) { } } class Animal { String name; int age; public void eat() { } } class Student extends Animal { public void study() { } } class Worker extends Person { public void work() { } }
/* 继承中成员的特点: 成员变量: 成员函数 构造函数 this是一个引用 super用于在子类中访问父类中的成员 父类中私有的成员,子类也会继承过来,只是无权访问,通过父类提供的; */ class Fu { private int num = 5; public int getNum() { return num; } } class Zi extends Fu { int num = 6; public void show() { //System.out.println(this.num); //System.out.println(super.num); System.out.println(getNum()); } } class Demo6 { public static void main(String[] args) { Zi z = new Zi(); //System.out.println(z.num); //System.out.println(z.num2); z.show(); } }
//成员函数 //子父类中出现了一模一样的方法(包括返回值类型),这种现象叫重写,覆盖 //子类一旦重写了父类中的方法,使用子类对象调用重写的方法执行的是子类中的 class Fu { public void show() { System.out.println("fu"); } } class Zi extends Fu { public void show() { System.out.println("zi"); } } class Demo7 { public static void main(String[] args) { Zi z= new Zi(); z.show(); } } /* class Phone { public void call() {} public void tel() { System.out.println("显示号码"); } } class NewPhone extends Phone { //沿袭了父类功能,实现不同了 public void tel() { super.tel(); System.out.println("显示名字"); } } */ /* class ZhangSan { public void eat() { System.out.println("细嚼慢咽"); } } class ZhangXiaoSan extends ZhangSan { public void eat() { System.out.println("狼吞虎咽"); } } */
/* 子父类中构造函数的特点: 在创建子类对象时,总是先调用父类的构造方法,再调用子类的构造方法,原因是系统默认在子类的构造方法的第一行加入了一条语句 super(),这条语句默认是调用父类中无参的构造方法 为什么先去调用的父类的构造方法:先去执行父类的构造方法,可以使用父类构造方法中的初始化功能 如果父类中没有无参的构造方法,那么子类必须在构造方法的第一行手动加上super调用父类中的某一个构造方法 */ class Fu { String name; int age; //Fu(){} Fu(String name,int age) { this.name = name; this.age = age; } } class Zi extends Fu { Zi() { super("lisi",5); System.out.println("zi"); } Zi(String name,int age) { super(name,age); //this.name = name; //this.age = age; } } class Demo8 { public static void main(String[] args) { Zi z = new Zi(); } }
class Fu { int age; Fu(){} Fu(int age) { this.age = age; } } class Zi { Zi() { //super(); System.out.println("Hello World!"); } Zi(int age) { this(); //this和super()都必须写在第一行,所以用了this就不能使用super()了 //super(age); } } class Demo9 { public static void main(String[] args) { Zi z = new Zi(67); } }
/* final:修饰符,可以修饰 类,变量,方法 一个类被修饰为final的,那么这个类不能被继承了 */ class Test { public static final double PI = 3.1415;//符号常量了 double radius =12.3; public void show()//这个方法不能被重写 { } public double area() { return PI* radius*radius; } } class Demo10 { public static void main(String[] args) { final int a=889; // a = 56; Test t = new Test(); t.show(); show(1,2); } public static int show(final int a,final int b) { a = 34; b = 67; return a+b; } } class Single { static final Single single = new Single();//引用single不能再指向其他的对象了 private Single(){} public static Single getInstance() { return single; } }
/* abstract:抽象的 */ class Demo11 { public static void main(String[] args) { System.out.println("Hello World!"); } } //如果一个类中含有抽象方法,那么这个类必须是抽象的 //抽象类:同样是类,同样是在描述事物,只不过出现了没有足够的信息描述事物方法 abstract class 犬科 { public abstract void 吼叫();//没有足够的信息描述事物的行为 } class 狗 { public void 吼叫() { System.out.println("汪汪"); } } class 狼 { public void 吼叫() { System.out.println("嗷嗷"); } }
//抽象类的特点: //1:抽象类不能创建对象 //2:抽象类的子类没有重写抽象类中的抽象方法,那么这个子类也是抽象类 /* 1:抽象类一定是父类吗? 一定是父类 2:抽象类有构造方法吗? 有构造方法,用来给子类进行初始化 抽象类和普通类有什么区别? 抽象类也是类,和普通类的相同点:都是类,都是用来描述事物的 不同点:1:抽象类不能创建对象,普通类可以创建对象 2:抽象类可以含有抽象方法,普通类不可以 3:抽象类和哪些修饰符不能同时使用? 1:final:抽象类需要被继承,被final修饰的类不能被继承 2:static:抽象方法不能通过类名调用,静态方法可以通过类名调用 3:private:抽象方法必须被子类可以覆盖,私有的方法不能被子类覆盖 4:抽象类一定含有抽象方法吗? 不一定,当不希望一个类被创建对象时,可以把这个类修饰为abstract */ //计算圆形和矩形的面积 abstract class Shape { public abstract double getArea(); } abstract class Circle extends Shape { public static final double PI = 3.1415; private double radius; public Circle(double radius) { this.radius = radius; } //没有覆盖父类中的抽象方法,那么该子类中也含有抽象方法,那么这个子类也是抽象类 //public abstract double getArea(); } class Rectangle extends Shape { private double length; private double width; public Rectangle(double length,double width) { this.length = length; this.width = width; } public double getArea() { return this.length*this.width; } } class Demo12 { public static void main(String[] args) { //Rectangle r = new Rectangle(10,10); //System.out.println(r.getArea()); Circle c = new Circle(); //Shape s = new Shape(); //s.getArea(); } }
/* 需求:公司中程序员有姓名,工号,薪水,工作内容。 项目经理除了有姓名,工号,薪水,还有奖金,工作内容。 对给出需求进行数据建模。 */ abstract class Employee { private String name; private String id; private double money; Employee(){} Employee(String name,String id,double money) { this.name = name; this.id = id; this.money = money; } public abstract void work(); } class Programmer extends Employee { Programmer(){} Programmer(String name,String id,double money){ super(name,id,money); } public void work() { System.out.println("敲代码"); } } class Manager extends Employee { private double bonus; Manager(){} Manager(String name,String id,double money,double bonus) { super(name,id,money); this.bonus = bonus; } public void work() { System.out.println("管理程序员"); } } class Demo13 { public static void main(String[] args) { Programmer pro = new Programmer("小黑","110",10000); pro.work(); Manager manager = new Manager("小白","119",15000,5000); manager.work(); } }
/* 接口:定义形式 interface { 全局常量(public static final) 抽象方法(public abstract) } 接口可以解决Java中单继承的问题 接口可以多实现,实现多个接口不会出现调用的不确定,因为接口中的方法都是抽象的,都没有实现 在创建子类对象调用接口中的方法时,很明确是在调用子类中覆盖的方法 */ // 把接口看成特殊的类 interface inter { public static final int NUM = 110; public abstract void show(); } interface inter2 { public abstract void show(); } class Test implements inter,inter2 { public void show() { System.out.println("show"); } } class Demo14 { public static void main(String[] args) { Test t = new Test(); //t.show(); System.out.println(Test.NUM); System.out.println(t.NUM); System.out.println(inter.NUM); } }
/* 一个类在继承的同时还可以去实现接口 类和类之间是继承 类和接口之间是实现 父类提供该继承体系的最基本的功能 实现可以得到继承以外的额外功能 */ class Person { } interface inter { public static final int NUM = 110; public abstract void show(); } class Student extends Person implements inter { } /* 接口和接口之间可以多继承 interface a {} interface b extends a {} interface c extends a,b {} */
import java.util.*; /* 接口的好处: 1:接口可以提高程序的扩展性 2:接口是对外暴露的一些规则 3:接口具备强制性,降低了类之间的耦合性 */ interface USB { } /* 抽象类和接口的区别: 犬科动物:警犬,导盲犬,搜爆犬 abstract class 犬科 { public abstract void 训练(); } class 警犬 extends 犬科 { public abstract void 训练(){ } public void 破案 () {} } class 导盲犬 extends 犬科 { public abstract void 训练(){ } public void 导盲 () {} } interface soubao { } class 搜爆犬 extends 犬科 implements soubao { public abstract void 训练(){ } public void 搜爆 () {} } class 搜爆猫 implements soubao { public void 搜爆 () {} } class 搜爆猪 implements soubao { public void 搜爆 () {} } */ class Demo16 { public static void main(String[] args) { Properties pro = System.getProperties(); System.out.println(pro); } }
/* 多态:多种形态 class Animal { } class 猫 extends Animal { } 猫:可以看成猫 猫 mao = new 猫();//常态 可以看成动物 Animal mao = new 猫();//多态 多态:父类类型的引用指向了子类类型的对象 多态的前提:存在继承或实现 多态的弊端:只能使用父类中定义的功能,子类特有的功能不能调用了 */ abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Demo17 { public static void main(String[] args) { Cat cat = new Cat(); cat.eat(); cat.catchMouse(); Animal mao = new Cat(); mao.eat(); //mao.catchMouse();//把子类类型的对象看成父类类型,就只能使用父类中定义的功能了 } }
abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨头"); } public void kanJia() { System.out.println("狗看家"); } } class Demo18 { public static void main(String[] args) { Cat cat = new Cat(); //cat.eat(); chi(cat); Dog dog1 = new Dog(); //dog1.eat(); chi(dog1); } public static void chi(Animal animal) //Animal animal = new Cat(); Animal animal = new Dog(); { animal.eat(); animal.kanJia(); } /* public static void chi(Cat cat) { cat.eat(); } public static void chi(Dog dog) { dog.eat(); } public static void chi(Pig pig) { pig.eat(); } */ }
//在多态中使用子类特有的功能 abstract class Animal { public abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("猫吃鱼"); } public void catchMouse() { System.out.println("猫抓耗子"); } } class Dog extends Animal { public void eat() { System.out.println("狗吃骨头"); } public void kanJia() { System.out.println("狗看家"); } } class Demo19 { public static void main(String[] args) { Animal animal = new Cat();// 向上转型--自动转换 //animal.eat(); //使用子类特有的功能 Cat cat = (Cat)animal;//向下转型--强制转 //cat.catchMouse(); chi(cat); } public static void chi(Animal animal)//Animal animal = new Cat(); Animal animal = new Dog(); { animal.eat(); if(animal instanceof Cat) { Cat cat = (Cat)animal; cat.catchMouse(); } if(animal instanceof Dog) { Dog dog = (Dog)animal; dog.kanJia(); } } }
/* 多态中成员的特点: 成员变量:在多态中编译时期能够使用哪些变量看父类,执行结果也看父类 成员函数:编译时期能够使用哪些方法看父类,执行结果看子类,如果子类重写了父类中的方法,看子类,否则看父类 静态成员函数:编译执行都看父类 */ class Fu { int num1 = 5; public void show() { System.out.println("fu"); } public static void ff() { System.out.println("fu static "); } } class Zi extends Fu { int num1 = 6; public void show() { System.out.println("zi"); } public void fun() { System.out.println("fun"); } public static void ff()//静态只能覆盖静态 { System.out.println("zi static "); } } class Demo20 { public static void main(String[] args) { Fu f = new Zi(); System.out.println(f.num1); //System.out.println(f.num2); f.show(); f.ff(); //f.fun(); } }
/* 接口和多态 */ interface inter { public void show(); } class Test1 implements inter { public void show() { System.out.println("test1"); } } class Test2 implements inter { public void show() { System.out.println("test2"); } } class Demo21 { public static void main(String[] args) { Test1 t = new Test1(); //t.show(); fun(t); Test2 t2 = new Test2(); //t2.show(); fun(t2); } public static void fun(inter in)//inter in = new Test1(); inter in = new Test2(); { //return in; in.show(); } /* public static void fun(Test1 t) { t.show(); } public static void fun(Test2 t) { t.show(); } */ }
/* 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。 狗通常的时候和人打招呼会通过“摇摇尾巴”,在被抚摸感到舒服的时候, 会“旺旺叫”,而在受到惊吓情绪烦躁时,会发出“呜呜”声; 猫也生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。 猫通常的时候和人打招呼会发出“喵~”的声音,在被抚摸情绪很好时, 会发出“咕噜咕噜”声,而在受到惊吓时,会发出“嘶嘶”声; 青蛙是一种两栖动物(既是水生动物也是陆生动物), 既不是哺乳类的也不是肉食性的,属于卵生。当青蛙情绪好的时候, 会在岸边“呱呱呱”的唱歌,而在受到惊吓时,会“扑通一声跳入水中”; */ abstract class Animal { public static final int HAPPY = 1; public static final int UNHAPPY = 2; protected boolean mammal; protected boolean carnivorous; private int mood; public void setMood(int mood) { this.mood = mood; } public int getMood() { return this.mood; } public boolean isMammal() { return this.mammal; } public boolean isCarnivorous() { return this.carnivorous; } public abstract String sayHello(); public abstract String sayHello(int mood); } interface Land { public abstract int getNumberOfLegs(); } interface Water { public abstract boolean getGillFlags(); public abstract boolean getLayEggsFlags(); } class Frog extends Animal implements Land,Water { private int numberOfLegs = 4; private boolean gillFlag = false; private boolean layEggsFlag = true; public Frog() { this.mammal = false; this.carnivorous = false; } public String sayHello() { return "呱呱"; } public String sayHello(int mood) { this.setMood(mood); int m = this.getMood(); switch(m) { case HAPPY: return "呱呱呱";//break; case UNHAPPY: return "扑通一声跳入水中"; default: return "呱呱"; } } public boolean getGillFlags() { return this.gillFlag; } public boolean getLayEggsFlags() { return this.layEggsFlag; } public int getNumberOfLegs() { return this.numberOfLegs; } } class Cat extends Animal implements Land { private int numberOfLegs = 4; public Cat() { this.mammal = true; this.carnivorous = true; } public String sayHello() { return "喵~"; } public String sayHello(int mood) { this.setMood(mood); int m = this.getMood(); switch(m) { case HAPPY: return "咕噜咕噜";//break; case UNHAPPY: return "嘶嘶"; default: return "喵~"; } } public int getNumberOfLegs() { return this.numberOfLegs; } } class Demo22 { public static void main(String[] args) { Cat cat = new Cat(); if(cat.isMammal()) System.out.println("猫是哺乳动物"); else System.out.println("猫不是哺乳动物"); if(cat.isCarnivorous()) System.out.println("猫是肉食动物"); else System.out.println("猫不是肉食动物"); System.out.println("猫通常情况下和人打招呼的方式是:"+cat.sayHello()); System.out.println("猫情绪好时和人打招呼的方式是:"+cat.sayHello(Animal.HAPPY)); System.out.println("猫情绪不好时和人打招呼的方式是:"+cat.sayHello(Animal.UNHAPPY)); System.out.println("猫是陆生动物,猫有"+cat.getNumberOfLegs()+"条腿儿"); } }
原文地址:http://blog.csdn.net/lc635408136/article/details/42001179