Java基础学习笔记1

来源:互联网 发布:十字绣制作软件 编辑:程序博客网 时间:2024/05/12 18:28

一边看codingke的视频,一边敲的代码,编辑于下,方便复习看之

从继承到多态(花了大半天的时间,主要是还没有进入状态,感觉好像还有很多很多东西等着学,20160108)

【扣丁学堂】


Test11主要是对super()的理解,父类中有带参的构造函数时,子类继承父类时要使用super()

package practice05;/* * 继承 * 允许多继承,父类,子类,子类的子类 * 在子类进行实例化时,首先实例化父类(调用父类的构造方法),再实例化子类 */public class Test11 {public static void main(String[] args){Dog dog1=new Dog("dog");dog1.print();dog1.desc();}}//父类class Animal{//如果属性需要被子类继承,那么可以使用protected关键字声明public Animal(String name){System.out.println("animal");}protected String name;protected void desc(){System.out.println("animal name is "+name);}}//子类/* * extends在java中是单继承 */class Dog extends Animal{//构造方法public Dog(String name){/* * 当父类中没有无参的构造函数是,子类中要使用super */super(name);//显示的调用父类的构造方法,在构造方法的第一行System.out.println("dog");this.name=name;}public void print(){System.out.println("my name is "+name);}//重写public void desc(){super.desc();//调用父类的方法,调用属性也相同System.out.println("dog name is "+name);}}


Test12写了一个关于管理商品的例子

里面有一个关于数组扩充的函数(这一点在c中好像只能用malloc实现了),还有一条语句{cosme[count]=cos;},便于对栈和堆的理解,相当于c中的指针

package practice05;import java.util.Arrays;public class Test12 {public static void main(String[] args){//}}class Cosmetic{private double money;private String name;public Cosmetic(double money,String name){this.money=money;this.name=name;}public double getMoney(){return money;}public void setMoney(double money){this.money=money;}public String getName(){return name;}public void setName(String name){this.name=name;}public String infor(){return name+" :"+money;}}class CosmeticManager{Cosmetic []cosme=new Cosmetic[3];int count=0;public void adding(Cosmetic cos){if(count==cosme.length){int len=cosme.length*3/2+1;cosme=Arrays.copyOf(cosme, len);}cosme[count]=cos;//注意着调语句//cosme[count].setMoney(cos.getMoney());//cosme[count].setName(cos.getName());count++;}public void printInfor(){for(int i=0;i<count;i++){System.out.println(cosme[i].infor());}}}class SortCosmeticManager extends CosmeticManager{//}

Test13是讲final(只是了解大概)

package practice05;/* * final声明的类不能被继承 * final声明的方法不能被重写 * final声明的属性可以有两种赋值 */public class Test13 {public static void main(String[] args){//}}class ParentClass{private final int num=10;private final int count;public ParentClass(){count=100;}public final void method(){//}}class SubClass extends ParentClass{//}
Test14开始讲abstract ,给我的感觉和继承一样

package practice05;public class Test14 {public static void main(String[] args){Man m=new Man();m.eat();Woman y=new Woman();y.eat();}}/* * 具体类继承抽象类必须要实现抽象方法 */class Man extends Person{public void eat(){System.out.println("eating with quick");}}class Woman extends Person{public void eat(){System.out.println("eating with slowly");}}/* * 有抽象方法的一定是抽象类,是抽象类不一定是抽象方法 * 抽象方法不能被实例化 * 抽象类似不能被用final,因为就是要被继承的 */abstract class Person{private String name;public abstract void eat();//没有实现,抽象方法}

Test15讲的是interface

package practice05;/* * 接口(是一种行为) * 接口是一组行为的规范,定义,没有实现 * 使用接口,可以让我们的程序更加利于变化 * 接口可以继承多个接口(例子??) * 一个类可以实现多个接口 * 抽象类实现接口可以不实现方法 * 接口中的所有方法的访问权限都是public * 接口中定义的属性都是常量 */public class Test15 {public static void main(String[] args){//}}class Girl implements Hit{public void cry(){System.out.println("crying");}public void eat(){System.out.println("eating continually");}}interface Eat extends Hit{public void eat();//下面的default不懂??public default void print(){//}}interface Hit{String info="";//public static final (定义常量的通常方法??) 属性就是常量void cry();//在接口中的方法默认为public}

Test16讲多态

用abstract来说明,不过这个例子的重要之处在于父类引用子类对象(似乎像是父类获得了子类的一切方法)

最后提了一下instanceof来判断强制转换是否可以

package practice05;/* * 多态(有点不懂???) * 父类可以代表子类,但是子类不能代表父类(向上转化) */public class Test16 {public static void main(String[] args){HomeCat hoc=new HomeCat();hoc.eat();YeCat yec=new YeCat();yec.eat();/* * 用父类的引用指向子类对象,便于扩展 * 父类一般用接口或者是抽象类(越抽象越好) */Cat cat=new HomeCat();/* * 向下转型(大转小,父类转子类) * 容易有异常 * 例 * Cat cat=new YeCat(); * HomeCat hoc=(HomeCat)cat; * 本身是YeCat *//* * instanceof判断类型是否可以转,可以就转,不可以就不转 * * if(cat instanceof HomeCat){HomeCat hc=(HomeCat)cat;} *///HomeCat hc=(HomeCat)cat;print(cat);}//多态public static void print(Cat cat){cat.eat();}}class HomeCat extends Cat{public void eat(){System.out.println("family cat eating with slowly");}}class YeCat extends Cat{public void eat(){System.out.println("outdoor cat eating with quickly");}}abstract class Cat{public String name;public abstract void eat();}
Test17 讲模板,不过觉得还是多态
package practice05;//多态,模板public class Test17 {public static void main(String[] args){//}}class Girl2 extends Games{public boolean putHand(){//一种写法java.util.Random r=new java.util.Random();return r.nextBoolean();}}class ModelGirl extends Games{public boolean putHand(){return false;}}abstract class Games{public void play(){System.out.println("play");System.out.println("outcome :");if(putHand()){System.out.println("accepted");}else{System.out.println("play again");}}public abstract boolean putHand();}

Test18 大综合,用接口来实现抽象类属性的多态
package practice05;/* * 接口应用-策略模式 * OO设计原则: * 1.面向接口编程(面向抽象编程) * 2.封装变化 * 3.多用组合,少用继承 *  */public class Test18 {public static void main(String[] args){Duck black=new BlackDuck("xiaohei");black.setFly(new FlyImpl());black.fly();Duck model=new ModelDuck("wanju");model.setFly(new NoFlyImpl());model.fly();}}interface Flyable{public void fly();}class FlyImpl implements Flyable{public void fly(){System.out.println("I can fly");}}class NoFlyImpl implements Flyable{public void fly(){System.out.println("I cann't fly");}}abstract class Duck{private String name;private Flyable flyy;public void setFly(Flyable flyy){this.flyy=flyy;}public Duck(String name){this.name=name;}public void fly(){System.out.println("我的名字是"+name);flyy.fly();//System.out.println("I'm a Duck flying very hightly");}}//真鸭子class BlackDuck extends Duck{public BlackDuck(String name){super(name);}}//玩具鸭子class ModelDuck extends Duck{public ModelDuck(String name){super(name);}/*public void fly(){System.out.println("I'm a Duck with unable to fly");}*/}





1 0
原创粉丝点击