zoukankan      html  css  js  c++  java
  • 《java入门第一季》之面向对象(抽象类到底多抽象)

    	/*
    抽象类的概述:
    		动物不应该定义为具体的东西,而且动物中的吃,睡等也不应该是具体的。
    		我们把一个不是具体的功能称为抽象的功能,而一个类中如果有抽象的功能,该类必须被称为是抽象类。
    		
    	抽象类的特点:
    		A:抽象类和抽象方法必须用abstract关键字修饰
    		B:抽象类中(不一定)有抽象方法,可以有具体的。但是有抽象方法的类必须定义为抽象类
    		C:抽象类不能实例化//Animal a = new Animal();无法实例化就是指:这个语句是没法执行的,抽象的不是具体无法创建该抽象类对象
    			因为它不是具体的。
    			抽象类有构造方法,但是不能实例化?构造方法的作用是什么?
    			用于子类访问该抽象父类数据时候的初始化
    		D:抽象的子类
    			a:如果不想重写抽象方法,该子类是一个抽象类。但这样没什么意义
    			b:重写所有的抽象方法,这个时候子类是一个具体的类。
    			
    		抽象类的实例化其实是靠具体的子类实现的。是多态的方式。
    			Animal a = new Cat();
    */
    
    //abstract class Animal //抽象类的声明格式
    abstract class Animal {
    	//抽象方法
    	//public abstract void eat(){} //空方法体,错误的
    	public abstract void eat();//抽象没有方法体
    	
    	public Animal(){}
    }
    
    //子类是抽象类,没有意义
    abstract class Dog extends Animal {}
    
    //子类是具体类,重写抽象方法
    class Cat extends Animal {
    	public void eat() {//对父类eat抽象方法的重写
    		System.out.println("猫吃鱼");
    	}
    }
    
    class AbstractDemo {
    	public static void main(String[] args) {
    		//创建对象
    		//Animal是抽象的; 无法实例化
    		//Animal a = new Animal();
    		//通过((多态)的方式实例化)
    		Animal a = new Cat();
    		a.eat();
    	}
    }
    /*
    	抽象类的成员特点:
    		成员变量:既可以是变量,也可以是常量。
    		构造方法:有。
    					作用:用于子类访问父类数据的初始化。
    		成员方法:既可以是抽象的,也可以是非抽象的。
    		
    	抽象类的成员方法特性:
    		A:抽象方法 强制要求子类做的事情。
    		B:非抽象方法 子类继承的事情,提高代码复用性。
    */
    abstract class Animal {
    	public int num = 10;//变量
    	public final int num2 = 20;//常量
    
    	public Animal() {}
    	
    	public Animal(String name,int age){}
    	
    	public abstract void show();
    	
    	public void method() {
    		System.out.println("method");
    	}
    }
    
    class Dog extends Animal {
    	public void show() {
    		System.out.println("show Dog");
    	}
    }
    
    class AbstractDemo2 {
    	public static void main(String[] args) {
    		Animal a = new Dog();
    		a.num = 100;
    		System.out.println(a.num);
    		//a.num2 = 200;//常亮不能再赋值了
    		System.out.println(a.num2);
    		System.out.println("--------------");
    		a.show();
    		a.method();//继承的方法
    	}
    }


    /*
    一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?
        A:可以。
        B:不让创建对象。只能通过子类去访问,通过自定义继承或者多态的方式
    
    abstract不能和哪些关键字共存?
        private    冲突
        final    冲突    
        static    无意义
    */

    下一篇(http://blog.csdn.net/qq_32059827/article/details/51334224)根据例子说再来了解象类。


  • 相关阅读:
    计算任意两个日期的间隔天数
    题目标题: 排它平方数
    历届试题 剪格子
    历届试题 翻硬币
    C语言中%d,%o,%f,%e,%x的意义
    历届试题 买不到的数目
    九度 OJ1008 hdu 3790
    南洋理工 OJ 115 城市平乱 dijstra算法
    蓝桥杯 错误票据 原创代码+思路
    历届试题 连号区间数
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299854.html
Copyright © 2011-2022 走看看