在此论坛第一天 Java 多态 抽象类 接口 final

博主为初学者 只为记录每天学习的点点滴滴内容有很大的局限性,希望谅解


所谓多态:
      一个引用(类型)指向父类的指针用来调用不同子类实现的方法
     优点:所有继承父类的子类都可以由父类的实例化统一访问。若子类无父类对应方法直接调用父类方法。
     Java允许父类的引用变量引用它子类的实例(对象)某些情况下子类也可以转化为父类(有一定的条件)

  

     public static void main(String [] args){
	   Animal an = new Cat();
	   /* an.cry();
	   an.eat();       //这里体现了多态的思想。 
	   an = new Dog();
	   an.cry();
	   an.eat();
	   Cat  cat = new Cat();
	   cat.cry();
	   Dog dog = new Dog();
	   dog.cry();*/
	   Master master = new Master();
	   master.feed(new Dog(), new Bone());
	   master.feed(new Cat(), new Fish());
	   
   }
}
class Animal{
	private String name;
	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;
	}
	private int age;
	
	public void eat(){
		
	}
	
	public void cry(){
		System.out.println ("不知道");
	}
}
class Cat extends Animal{
	public void cry(){
		System.out.println("喵喵喵");
	}
	public void eat(){
		System.out.println("小猫喜欢吃鱼");
	}
}
class Dog extends Animal{
	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("fish");
	}
}
class Bone extends Food{
	public void showname(){
		System.out.println("bone");
	}
}
class Master{
	public void feed(Animal	 an , Food f){
		an.eat();
		f.showname();
		
	}
}


 在上面程序中体现了多态的思想抽象类:在父类设置方法不确定的情况下,不需要做出方法体。在前面加入abstract关键词具有抽象方法的类叫做抽象类,class Demo{}前面也应该加入abstract关键词当一个类继承的父类是抽象类的话 一定要在子类中去实现父类中所有的抽象方法——方法的重写抽象类一定不可被实例化,无论抽象类中有多少抽象的方法。抽象类中可以没有抽象的方法(可以不具有包含abstract的方法)抽象类只能通过子类的继承(extends)去实现抽象方法不能有主体 abstract void demo(){主体}; error 
public class Chou {//抽象类的必要性

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}
abstract class Anima{//抽象类
    String name;
    int age;
    abstract public void cry();   //抽象方法 抽象方法绝对不可以实现。
}
class Cat5 extends Anima{            //继承的抽象类
    
    public void cry(){            //必须实现的抽象方法
        
    }
    
}

接口:接口不能实例化,接口中的所有方法都不能有主体(抽象类中可以有实现的方法但是接口中不可以)接口相当于更加抽象的类。一个类可以有多个接口 class Demo1 extends Demo{}只能单一继承 但是 class Demo implements Demo1,Demo2{};是允许的。接口存在的意义:子类只能单一的去继承父类(java中单一继承机制)故引入接口的概念一个接口一定不能被实例化。接口本身不能实现里面的方法,必须由implements接口名的类去实现接口里面的方法,接口中可以有变量


public class jiekou{
    public static void main(String []args){
        Computer computer = new Computer();        //实例化对象
        Camera camera = new Camera();        //实例化对象 
        Phone phone = new Phone();          //实例化对象
        computer.usbUsb(camera);          //电脑中的接口(方法与相机中相对接)
        computer.usbUsb(phone);//电脑中的接口(方法与手机中的对接)
        
    }
}
interface Aaa{
      public void bbb();
}
interface Usb extends Aaa{              //设置接口 接口不能继承类 但是接口可以继承另一个接口
                            //被继承的接口中的方法也必须被实现
    int a=0;                //接口中可以有变量 不过变量必须被初始化
                            //但是变量能被private 和protected修饰 
                            //接口中的变量本身是静态的 是final的(static)
                            //用 Usb.a 去访问 
    public void start ();   //接口中两个方法  接口中不能有实现的方法
    public void stop();
}
class Camera implements Usb{ //定义具有接口的类
    public void bbb(){
        //实现被继承aaa中的bbb方法
    }
    
    public void start() {    //实现接口中的方法
        System.out.println("我是相机 我开始工作了");
    }

    public void stop() {    //实现接口中的方法
        System.out.println("我是相机我停止工作了");
    }
}
class Phone implements Usb{  //定义具有接口的类
    public void bbb(){
        //实现被继承的Aaa中的bbb方法
    }
    
    public void start(){
        System.out.println("我是手机 我开始工作了");//实现接口中的方法
    }
    public void stop(){
        System.out.println("我是手机我停止工作了");//实现接口中的方法 接口中的方法必须都实现
    }
}
class Computer{                      //创建一个类
    public void usbUsb(Usb  usb){    //创建一个和接口对接的方法
        usb.start();                 //运行接口中的方法
        usb.stop();
    }
}
//接口中可以有变量

final关键词:中文:最后的最终的 可以修饰变量或者方法。“当不允许父类的某个方法(变量)被子类覆盖(override)的时候,在父类方法加入final修饰词即可”


class Demo{
  final public void sendMes(){
         //此方法不可被修改或覆盖
     }
}


final class Demo{
    int a;                  //若不赋初始值 a为o 尽不要不赋予初始值
    final float rate_1=3.1415926f; //final 定义后必须赋初始值
    final public void sendMes(){
        
    }
}
class Demo1 extends Demo{    //因为父类类型为final 故不能被继承
    public Demo1(){
        a++;
        rate_1++;     //因为父类变量为final 故不能被修改
    }
    public void sendMes(){  //因为父类方法为final故不能被覆盖 编译器报错
        
    }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值