java抽象函数代码,JAVA抽象类和抽象方法

类函数、成员函数、静态函数、抽象函数、方法伪装属性

本篇博客是滚雪球学 Python 第二轮的最后一篇博客,我们将内容继续提升到面向对象部分,为你补充类里面的一些装饰器,学习之后,希望你的 Python 基础知识可以更上一层楼。

十年品牌的成都网站建设公司,成百上千企业网站设计经验.价格合理,可准确把握网页设计诉求.提供定制网站建设、成都商城网站开发小程序开发成都响应式网站建设公司等服务,我们设计的作品屡获殊荣,是您值得信赖的专业网站设计公司。

先直接看代码,再对代码内容进行分析与学习。

首先要掌握的是类函数的定义格式,在普通函数的前面添加装饰器 @classmethod ,该函数就会转换为类函数,同时函数的第一个参数默认是 cls ,该变量名可以任意,建议使用成 cls ,这个是程序员之间的约定。

在 Python 中,大部分 @classmethod 装饰的函数末尾都是 return cls(XXX) , return XXX.__new__ () 也就是 @classmethod 的一个主要用途是作为构造函数。

先掌握一个概念,静态函数不属于它所在的那个类,它是独立于类的一个单独函数,只是寄存在一个类名下,先建立这个基本概念,后面学起来就简单很多了。

在同一个类中,调用静态方法,使用 类名.函数名() 的格式。

先创建一个父类,其中包含两个静态函数与一个类函数。

再编写一个 S 类继承自 F 类:

测试之后,基本结论如下:

如果在子类中覆盖了父类的静态函数,那调用时使用的是子类自己的静态函数,

如果在子类中没有覆盖父类的静态函数,那调用时使用的是父类的静态函数,

类函数同样遵循该规则。

如果希望在子类中调用父类的属性或者函数,请使用 父类名. 的形式实现。

被 @abstractmethod 装饰的函数为抽象函数,含抽象函数的类不能实例化,继承了含抽象函数的子类必须覆盖所有抽象函数装饰的方法,未被装饰的可以不重写。

抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化,实现代码如下:

抽象基类中学习还需要了解元类相关知识,在第三轮滚雪球学 Python 中将为你展开这部分内容。

在 Python 面向对象的编码过程中, 对象.属性 来获取属性的值,使用 对象.方法() 来调用方法,通过装饰器 @property 可以将一个方法伪装成属性,从而使用 对象.方法 没有括号的形式调用。代码非常简单:

这种写法最直接的应用,就是将部分属性变成只读属性,例如,上述代码,你无法通过下述代码对 name 进行修改。

如果希望方法伪装的属性具备修改和删除功能,需要参考下述代码:

上述代码在将 name 方法伪装成属性之后,可以通过 @name.setter 和 @name.deleter 对同名的 name 方法进行装饰,从而实现了修改与删除功能。

所以一般使用方法伪装属性的步骤是:

如果你觉得这个比较麻烦,还存在一种方法伪装属性的方式。使用 property 函数,原型如下

通过上述函数将方法伪装成属性的代码为:

滚雪球学 Python 第二轮 15 篇博客在一次结束了,下一轮将在 4 月中旬再次开启,学 Python 我们一直在路上,希望本系列的课程对你的 Python 学习有所助力。

抽象函数 java

1、抽象类

当想要通过共通接口来操作一组classes时,便可撰写abstract class。子类中所有与“抽象类所声明的标记式”相符的函数,都会通过动态绑定的机制来调用。

有一组类他们拥有一系列相似的行为特征,它们拥有一些共同的函数,我们就把这些共同特征抽取出来放到抽象类中,抽象类为所有的子类提供“共同的接口”。

建立抽象类的唯一理由是:

各子型别都可以以以不同方式来表现此一共同接口。达到多态性的目的。

注意点:

* 抽象函数只能在抽象类中出现(即,一个普通的类中,不能声明抽象函数,一旦声明,要将该class用abstract做饰词,否则编译出错)

* 抽象类不能被实例化。否则编译出错。

* 只有当子类实现了抽象类中定义的所有函数,该子类才可被实例化。否则,该子类便也是个抽象类。

* 也可以将一般的类(不含任何抽象函数的类)声明为abstract。表明不允许该类产生任何实例。

2、接口

完全抽象的class,不带半点实现内容。interface相当于是在类之间建立起的一个协议。

interface使得我们可以撰写出“可被向上转型为多个基本型别”的class,达到C++多重继承的变形。

注意点:

* 默认interface是friendly,可通过加上关键字public成为public。

* interface中定义的函数默认是public的,因为它提供共同接口,需要可以被外界访问。为了增强程序可读性,可显式声明为public。

* 当实现某个interface,用关键字implement。

实现类中袭承自interface的函数必须都要定义为public。一定要显式写明是public,默认就变成friendly,减低了访问权限,这在Java编译器中是不允许的。

3、区别和联系

异:

* 抽象类用于支持多态性,接口用来支持“多继承”变形—— 一个class可向上转型为多个基本型别。

* 抽象类中函数既可是抽象的,也可是包含实现细节的。接口只能表示形式,其中函数必定都是抽象的。

* 抽象函数中可定义变量。接口只能定义 static/final 的成员变量。

同:

- 抽象类和接口都不能被实例化。

用Java语言编写,要求申明三角形类,继承图形抽象类,计算三角形的周长和面积!

图形抽象类的代码:

abstract class MyShape {

abstract int calGirth(); //求周长

abstract double calSquare(); //求面积

}

三角形类的实现:

public class Triangle extends MyShape{

int borderA, borderB, borderC;

Triangle(int a, int b, int c){borderA = a; borderB = b; borderC = c;}

Triangle(){borderA = borderB = borderC = 0;}

@Override

int calGirth() {

return borderA + borderB + borderC;

}

@Override

double calSquare() {

double p = calGirth() / 2;

return Math.sqrt(p * (p - borderA) * (p - borderB) * (p - borderC));

}

public static void main(String[] args) {

Triangle test = new Triangle(3, 4, 5);

System.out.println("The girth of the triangle is " + test.calGirth());

System.out.println("The square of the triangle is " + test.calSquare());

}

}

实现两个抽象函数,测试结果正确,输出为:

The girth of the triangle is 12

The square of the triangle is 6.0

java定义一个抽象类Person 在其中定义一个抽象函数pay(),然后从Person 派生出若

Java程序:

//抽象人类

abstract class Person {

//薪水

protected double salary;

public Person() {

this.salary = 0;

}

public Person(double salary) {

this.salary = salary;

}

//抽象方法

abstract void pay();

}

//工人类

class Worker extends Person {

public Worker(double salary) {

super(salary);

}

@Override

void pay() {

System.out.println("工人工资:" + salary);

}

}

//程序员类

class Programmer extends Person {

public Programmer(double salary) {

super(salary);

}

@Override

void pay() {

System.out.println("程序员工资:" + salary);

}

}

public class Main {

public static void main(String[] args) {

Person p; //声明抽象类对象

p = new Worker(5000); //用子类实例化抽象类对象

p.pay(); //调用被实现的方法

p = new Programmer(8000); //用子类实例化抽象类对象

p.pay(); //调用被实现的方法

}

}

运行测试:

工人工资:5000.0

程序员工资:8000.0

JAVA编程题:编一个程序包含一个接口 shape(该接口中定义抽象函数calarea()), 一个圆类和一个长方形类

//Shape.java

public interface Shape{

public double calarea();

}

//Rectangle.java

public class Rectangle implements Shape{

private double length;

private double high;

public Rectangle(double length,double high){

this.length = length;

this.high = high;

}

public double calarea(){

return length*high;

}

}

//Circle Circle.java

public class Circle implements Shape{

private double radius;

public double calarea(){

return Math.PI*radius*radius;

}

public Circle(double radius){

this.radius = radius;

}

}

//Test.java

public class Test{

public static void main(String []args){

Shape recShape = new Rectangle(2.7,4.8);

Shape cirShape = new Circle(5.0);

System.out.println(recShape.calarea());

System.out.println(cirShape.calarea());

}

}

直接手写的,辛苦吧


本文名称:java抽象函数代码,JAVA抽象类和抽象方法
链接分享:http://ybzwz.com/article/dssidsg.html