Java 抽象类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 抽象类相关的知识,希望对你有一定的参考价值。
/* final(最终、修饰符) final 是指栈内存中的变量不能变,而不是指堆内存里面的值不能变 final关键字的用法: 1. final关键字修饰一个基本类型的变量时,该变量不能重新赋值,第一次的值为最终的。 2. fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象。 3. final关键字修饰一个函数的时候,该函数不能被重写。 4. final关键字修饰一个类的时候,该类不能被继承。 5. 被final 修饰的成员变量,一定赋予初值 常量 的修饰符一般为: public static final */ //圆形 class Circle{ double r; //半径 public static final double pi = 3.14; //固定不变的 public Circle(double r){ this.r = r; } //计算面积 public final void getArea(){ System.out.println("圆形的面积是:"+r*r*pi); } } class Demo2 extends Circle { public Demo2(double r){ super(r); } public static void main(String[] args) { final Circle c = new Circle(4.0); test(c); //不会报错 Demo2 c = new Demo2(4.0); c.getArea(); } public static void test(Circle c){ c = new Circle(5.0); //c变量又重新指向了新的对象。 c.getArea(); } }
/* ***象类: 目前存在的问题: 1. 动物类的run方法描述的不正确。 2. 没有强制要子类一定要重写run方法。 ***象类的应用场景: 我们在描述一类事物的时候,发现该种事物确实存在着某种行为, 但是这种行为目前是不具体的,那么我们可以***取这种行为的声明,但是 不去实现该种行为,这时候这种行为我们称作为***象的行为,我们就需要使用***象类。 ***象类的好处: 强制要求子类一定要实现指定的方法。 ***象类要注意的细节: 1. 如果一个函数没有方法体,那么该函数必须要使用abstract修饰,把该函数修饰成***象 的函数。。 2. 如果一个类出现了***象的函数,那么该类也必须 使用abstract修饰。 3. 如果一个非***象类继承了***象类,那么必须要把***象类的所有***象方法全部实现。 4. ***象类可以存在非***象方法,也可以存在***象的方法. 5. ***象类可以不存在***象方法的。 5. ***象类是不能创建对象的。 疑问:为什么***象类不能创建对象呢? 因为***象类是存在***象方法的,如果能让***象类创建对象的话,那么使用***象的对象 调用***象方法是没有任何意义的。 6. ***象类是存在构造函数的,其构造函数是提供给子类创建对象的时候初始化父类的属性的。 */ //动物类--->***象类 abstract class Animal{ String name; String color; public Animal(String name,String color){ this.name = name; this.color = color; } //非***象的方法 public void eat(){ System.out.println(name+"吃粮食"); } //移动... public abstract void run(); } //狗 是属于动物中一种 class Dog extends Animal{ public Dog(String name,String color){ super(name,color); } public void run(){ System.out.println(name+"四条腿跑得很快..."); } } //鱼 是属于动物中一种 class Fish extends Animal{ public Fish(String name,String color){ super(name,color); } public void run(){ System.out.println(name+"摇摇尾巴游啊游!"); } } class Demo3 { public static void main(String[] args) { /* Dog d = new Dog("牧羊犬","棕色"); d.run(); //创建一个鱼对象 Fish f = new Fish("锦鲤","金黄色"); f.run(); */ Animal a = new Animal(); } }
/* 需求: 描述一个图形、圆形、 矩形三个类。不管哪种图形都会具备计算面积 与周长的行为,但是每种图形计算的方式不一致而已。 常量的命名规范:全部字母大写,单词与单词之间使用下划线分隔。 abstract不能与以下关键字共同修饰一个方法,因为别人是要重写的 1. abstract不能与private共同修饰一个方法。 2. abstract 不能与static共同修饰一个方法。 3. abstract 不能与final共同修饰一个方法。 */ //abstract ***象 //图形类 abstract class MyShape{ String name; public MyShape(String name){ this.name = name; } public abstract void getArea(); public abstract void getLength(); } //圆形 是属于图形类的一种 class Circle extends MyShape{ double r; public static final double PI = 3.14; public Circle(String name,double r){ super(name); this.r =r; } public void getArea(){ System.out.println(name+"的面积是:"+PI*r*r); } public void getLength(){ System.out.println(name+"的周长是:"+2*PI*r); } } //矩形 属于图形中的 一种 class Rect extends MyShape{ int width; int height; public Rect(String name,int width, int height){ super(name); this.width = width; this.height = height; } public void getArea(){ System.out.println(name+"的面积是:"+width*height); } public void getLength(){ System.out.println(name+"的周长是:"+2*(width+height)); } } class Demo4 { public static void main(String[] args) { //System.out.println("Hello World!"); Circle c = new Circle("圆形",4.0); c.getArea(); c.getLength(); //矩形 Rect r = new Rect("矩形",3,4); r.getArea(); r.getLength(); } }
本文出自 “小鱼的博客” 博客,谢绝转载!
以上是关于Java 抽象类的主要内容,如果未能解决你的问题,请参考以下文章