抽象类定义成员变量(为什么抽象类可以设置成员变量 ,而普通类不可以)

本文目录
- 为什么抽象类可以设置成员变量 ,而普通类不可以
- java 抽象类中可以定义哪些成员变量和函数
- java抽象类里面用该抽象类的子类作为成员变量,这是什么用法
- 创建一个学生类,成员属性为学号,姓名,性别,年龄,java,成绩成员属性通过构造方法
- 关于抽象类和静态成员变量的问题
- 关于接口和抽象类的简单理解
- java中的抽象类中的方法必须是抽象方法么其中的成员变量必须是public static final的么
- 编写一个抽象类Shape,声明计算形状面积的抽象方法ShapeArea()和成员变量ShapeColor(颜色).再分别定义Shap
- java抽象类中可以声明变量吗能赋初值吗
为什么抽象类可以设置成员变量 ,而普通类不可以
.......
abstract class A{
int a=0;
}//对
class B{
int b=0;
}//对
java 抽象类中可以定义哪些成员变量和函数
都可以,抽象类中可以包含抽象方法,但是不是一定要包含。一个抽象类可以没有抽象方法都行。如果一个类中包含了一个抽象方法,那么这个类一定是抽象类。
抽象类中能包含的与普通类没什么根本区别。
1.如果一个类被定义为抽象类,且没有包含任何抽象方法,(也就是说该抽象类已经都实现了这些方法),那么子类在继承这个抽象类的时候不必重写这些方法。
2.相应的,如果一个类被定义为抽象类,包含抽象方法,那么在子类中一定要实现这些抽象方法。否则,子类必须声明为一个抽象类。
java抽象类里面用该抽象类的子类作为成员变量,这是什么用法
这个是java的多态特性,其实不是父类用子类的成员变量,是子类用子类的成员变量
Fu fu = new Zi();
这里的fu实际上已经指向子类了
创建一个学生类,成员属性为学号,姓名,性别,年龄,java,成绩成员属性通过构造方法
public class Student {
//1、定义成员变量
private String no;//学号
private String name;//姓名
private String sex;//性别
private String age;//年龄
private float score;//成绩
//2、通过构造方法初始化成员变量的值
public Student(String no, String name, String sex, String age , float score) {
this.no = no;
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
//测试
public static void main(String args) {
//new一个学生对象,并使用构造方法初始化成员变量
Student S01 = new Student("s01", "张三", "男", "20", 99);
System.out.println("学号:"+S01.no+"\n"+
"姓名:"+S01.name+"\n"+
"性别"+S01.sex+"\n"+
"年龄"+S01.age+"\n"+
"成绩"+S01.score);
}
}
代码截图:
扩展资料:
抽象类
并不是所有种类的事物都可以被实例化,换而言之,有的种类只是一种抽象概念,现实中并没有实际存在的对应物。
比如:假设所有的动物都会叫,我们可以定义一个类“动物”,定义类中的一个成员函数“叫”,我们知道猫的叫声,也知道狗的叫声,然而“动物”是如何“叫”的?我们根本无法实现它。
所以,我们引入了抽象类的概念,抽象类是无法被实例化的,无法声明抽象类的对象。
通常,用abstract修饰的类是抽象类;C++中包含纯虚函数的类是抽象类;Java中含有抽象方法的类是抽象类;继承了纯虚函数而没有实现它的类也是抽象类。
抽象类只能被用作基类,作用体现在:
1、约束派生类必须实现的成员函数或方法。
2、不同派生类中同名的成员函数实现不同,体现了多态性。
参考资料:百度百科-类(编程术语)
关于抽象类和静态成员变量的问题
LZ需要明白静态变量属于类本身,存储于方法区,与类的实例无关。而之所以用其子类可以引用,是因为虚拟机在加载的A1,A2的时候会先加载A,至于解决方法:就是把static去掉(用instance来引用)
关于接口和抽象类的简单理解
抽象类:
抽象类体现了数据抽象的思想,是实现多态的一种机制。
1.由 abstract 关键词修饰的类称之为抽象类。
2.抽象类中没有实现的方法称之为抽象方法,也需要加关键字 abstract 。
3.抽象类中也可以没有抽象方法。
4.抽象类中可以有已经实现的方法,可以定义成员变量。
5.抽象类可以多层继承。
接口:
接口提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必须要实现该接口的所有方法,通过使用implements关键字实现。
1.由 interface 关键词修饰的称之为接口;
2.接口中可以定义成员变量,但是这些成员变量默认都是 public static final 的常量。
3.接口中没有已经实现的方法,全部是抽象方法。
4.一个类实现某一接口,必须实现接口中定义的所有方法。
5.一个类可以实现多个接口。
区别:
1.抽象层次不同。
抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,
接口却是对类局部(行为)进行抽象。
2.设计层次不同。
抽象类是自下而上来设计的,要先知道子类才能抽象出父类,是自底向上抽象而来的。
接口不需要知道子类的存在,只需要定义一个规则即可,是自顶向下设计出来的。
3.实现不同。
比如 鸟和飞机都有飞的行为
用抽象类实现:
父类:
飞机:
鸟:
用接口实现:
接口:
飞机:
鸟:
鸟类有吃东西的方法。但用抽象类继承,飞机也要实现吃东西的方法,显然是不合理的,
所以从这里可以看出来,抽象类是抽象的共有的属性或方法。而接口只是抽象了局部的一部分。
抽象类+接口:
鸟:
接口:
java中的抽象类中的方法必须是抽象方法么其中的成员变量必须是public static final的么
抽象类可以有抽象方法也可以没有抽象方法,有抽象方法的类一定是抽象类,抽象类不能被实例化,就是不能new。
接口里定义的变量用public static final修饰,抽象类里面也可以定义被public static final修饰的变量
编写一个抽象类Shape,声明计算形状面积的抽象方法ShapeArea()和成员变量ShapeColor(颜色).再分别定义Shap
你这个人问题我也问过,是yinfengnong这位大佬帮我的非常感谢他。再次我把他的代码给你。侵权立删网页链接
代码如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
#include 《iostream》#include 《string》using namespace std; #define PI 3.1415926 class Shape { public: Shape(const string& color) : mShapeColor(color) {} const string& GetShapeColor() { return mShapeColor; } void SetShapeColor(const string& color) { this-》mShapeColor = color; } virtual double ShapeArea() = 0; private: string mShapeColor;}; class Circle : public Shape { public: Circle(const string& color, double raidus) : Shape(color), mRaidus(raidus) {} double ShapeArea() { return PI * mRaidus * mRaidus; } private: double mRaidus;}; class Rectangle : public Shape { public: Rectangle(const string& color, double width, double height) : Shape(color), mWidth(width), mHeight(height) {} double ShapeArea() { return mWidth * mHeight; } private: double mWidth; double mHeight;}; class Triangle : public Shape { public: Triangle(const string& color, double width, double height) : Shape(color), mWidth(width), mHeight(height) {} double ShapeArea() { return mWidth * mHeight / 2; } private: double mWidth; double mHeight;}; int main(){ Circle c("红色", 123.456); cout 《《 "圆:颜色=" 《《 c.GetShapeColor() 《《 ", 面积=" 《《 c.ShapeArea() 《《 endl; Rectangle r("白色", 100, 300); cout 《《 "矩形:颜色=" 《《 r.GetShapeColor() 《《 ", 面积=" 《《 r.ShapeArea() 《《 endl; Rectangle t("绿色", 123, 234); cout 《《 "三角形:颜色=" 《《 t.GetShapeColor() 《《 ", 面积=" 《《 t.ShapeArea() 《《 endl; return 0;}
java抽象类中可以声明变量吗能赋初值吗
public class chouDemo {
public static void main(String args) {
father s=new son();
s.aaaa(3, "hello");//3和hello就是给形式参数赋值
}
}
abstract class father{
int i=12;
public void aaa(){
int a=1;//实例方法直接赋值
}
public abstract void aaaa(int y,String s);//抽象方法没有方法体,也就是没有成员变量
}
class son extends father{
public void aaaa(int y,String s){
int x=y;
String c=s;
}
}

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40








